メール送信のキューサービスとしてmongodbを使用しています。まもなく、次のように機能します。
- 新しいメッセージが届いたら、mongodbに保存します。
- 次に、バックグラウンドジョブは、アトミック操作findAndModifyを介してmongodbからメッセージをロードし、フラグ
Processing
を設定します。 trueの場合、同じメッセージを2回処理しません(バックグラウンドジョブが複数のスレッドを並行して実行するため)。 - メールが送信されたら、mongodbからドキュメントを削除します。
- 各メッセージの失敗をカウントし、3回失敗した後にメッセージを削除することもできます。
一般に、mongodbをキューサービスとして使用する理由は1つだけです。指定されたスケジュールでメールを送信する必要があるためです(各メッセージには、送信する時刻に関する情報が含まれています)。
スケジュールがなく、メッセージをすぐに処理する必要がある場合は、既存のキューサービスを調べることをお勧めします。これは、メッセージキューをより深く理解しなければ、表示されない可能性のあるすべてのケースを処理できる可能性があるためです。
更新
メッセージ処理中にバックグラウンドジョブがクラッシュした場合は、次のように実行できます。
-
このメッセージを別のメッセージキューエラーコレクションに移動するか、または..
-
メッセージ内の処理試行カウンターを増やし、ステータス「新規」を再度割り当てて、メッセージの処理を再試行します。バックグラウンドジョブがべき等(同じメッセージを複数回処理でき、データを破損しない)でトランザクション(ジョブが失敗した場合は、行った変更を元に戻す必要があります)であることを確認してください。 5回の試行(構成値)後にジョブが失敗した場合は、#1を実行します。
-
メッセージ処理のバグが修正されたら、「新規」ステータスを割り当ててメッセージキューに移動するか、このメッセージを削除することで、もう一度処理できます。実際にはビジネスプロセスに依存します。