トランザクションメールとSMS
登録、領収書、リセットのメッセージはWebアプリがキューに入れ、ワーカーのプールが送信します。
ワーカーが停止してもジョブを失わないFIFOキュー。プロデューサーとコンシューマーは並列に動作します。
どのサービスも、コンシューマーを待たずに仕事を追加できます。
実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。
メール、画像のリサイズ、Webhookといったバックグラウンド処理には、仕事を作るコードと実行するコードの間にキューが必要です。ワーカーがタスクの途中でクラッシュしたときにジョブを失うキューは、キューがないよりも悪い状態です。ジョブが消えたことに誰も気づかないからです。
リストを使えば、シンプルなFIFOキューになります。BLMOVEは各ジョブをワーカーに渡す際に処理中リストへ移すため、そのワーカーが消えても、処理中のジョブは必ずどこかに保存されています。プロデューサーとコンシューマーは、並列のワーカースレッドで処理されます。
どのサービスも、コンシューマーを待たずに仕事を追加できます。
LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"BLMOVEはジョブが届くまでブロックし、届いたら1ステップで処理中リストに移します。
BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0メールが送信されました。ジョブは処理中リストから削除されます。
LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"ワーカー2がジョブの途中で停止します。そのジョブは処理中リストに残っており、失われていません。
LRANGE queue:emails:processing 0 -1モニターが放棄されたジョブをキューに戻し、別のワーカーがそれを取得します。
LMOVE queue:emails:processing queue:emails LEFT RIGHT登録、領収書、リセットのメッセージはWebアプリがキューに入れ、ワーカーのプールが送信します。
アップロードはサムネイル作成とトランスコードのためにキューに入り、トランスコーダーがクラッシュしてもファイルが失われることはありません。
送信するWebhookはキューに入れて再試行されるため、それを発生させたリクエストをブロックしません。
LPUSHとBRPOPを使い、ワーカーは仕事が届くまでスリープします。
LPUSHBRPOPBLMOVEが各ジョブをアトミックに処理中リストへ渡します。
BLMOVELREMプロデューサーとコンシューマーは、並列のワーカースレッドで処理されます。
確認応答、コンシューマーグループ、リプレイが必要な場合はストリームを使います。
XADDXREADGROUPBLMOVEでジョブを取得していれば、ジョブは処理中リストに残ります。モニターが、そこに長く残りすぎているものをキューに戻せます。
いいえ。BRPOPとBLMOVEは、ジョブが届くまでブロックします。タイムアウトも設定できます。
リストは最もシンプルなキューです。ストリームは、コンシューマーグループ、メッセージごとの確認応答、履歴を追加します。イベントストリーミングのユースケースをご覧ください。
HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。