複数のキューと複数のコンシューマーでAmazon SQSを使用するサービスベースのアプリケーションがあります。イベントベースのアーキテクチャを実装し、他のシステムの状態の変化に異なるサービスが反応するすべてのサービスを分離できるように、これを行っています。例えば:
私はいくつかの問題を抱えています:
私の質問はこれだと思います:メッセージが確実に配信および削除されることを保証しながら、SQSの単一キューに対して複数のコンシューマーを確保できるようにするために、どのパターンを使用する必要があります。ご協力ありがとうございました。
間違っていると思います。
同じキューを使用して複数の異なることをしているように見えます。単一の目的で単一のキューを使用する方が適切です。
イベントを「新規登録」キューに入れてから、2つの異なるサービスがそのキューをポーリングする代わりに、両方がそのメッセージを読み取り、両方ともそれとは異なる何かをする必要があります(そして、それを削除することになっている3番目のプロセスが必要です)他の2人が処理した後のメッセージ)。
1つの目的で1つのキューを使用する必要があります。
「index-user-search」キューと「mixpanelsに送信」キューを作成して、検索サービスが検索キューから読み取り、ユーザーのインデックスを作成し、すぐにメッセージを削除するようにします。
Mixpanel-serviceは、mix-panelsキューから読み取り、処理します
メッセージおよびメッセージを削除します。
登録サービスは、「registration-new」を単一のキューに発行する代わりに、2つのキューに発行します。
一歩前進させるには、ここにミックスにSNSを追加し、登録サービスに「registration-new」トピック(キューではなく)にSNSメッセージを送信させてから、上記の両方のキューをそのトピックにサブスクライブさせます「ファンアウト」パターン。
https://aws.Amazon.com/blogs/aws/queues-and-notifications-now-best-friends/
両方のキューがメッセージを受信しますが、SNSにロードするのは1回だけです-3番目の無関係なサービスが「登録新規」イベントも処理する必要がある場合、別のキューを作成してトピックにサブスクライブすることもできます-依存関係や他のサービスが何をしているかを知らずに実行する-それが目標です。