[解決済み] Amazon SQSを複数のコンシューマで使用する
質問
私は、複数のキューと複数のコンシューマでAmazon SQSを使用するサービスベースのアプリケーションを持っています。私は、イベントベースのアーキテクチャを実装し、すべてのサービスを切り離し、異なるサービスが他のシステムの状態の変化に反応できるようにするために、これをやっています。例えば、以下のような感じです。
-
登録サービス
:
- 新しいユーザーが登録されると、イベント 'registration-new' を発行します。
-
ユーザーサービス
:
- ユーザーが更新されたときにイベント 'user-updated' を発行します。
-
検索サービス
:
- キュー 'registration-new' から読み込んで、ユーザを検索対象にインデックスします。
- キュー 'user-updated' から読み込み、検索対象のユーザーを更新します。
-
メトリックスサービス
:
- registration-new'キューから読み込み、Mixpanelに送信します。
- キュー 'user-updated' から読み込み、Mixpanel に送信します。
いろいろと問題があるのですが。
- ポーリングを行う際、メッセージを複数回受信することがある。多くのシステムはべき乗になるように設計できますが、いくつかのサービス(例えばメトリクスサービス)については、それははるかに難しいでしょう。
- SQSのキューからメッセージを手動で削除する必要があります。私は、すべてのサービスがメッセージを受信したときに、メッセージの削除を処理するquot;message-handling-service"を実装することを考えました(各サービスは、メッセージを処理した後に「メッセージ承認」イベントを発行することになります)。
SQSの1つのキューに対して複数のコンシューマを持つことができ、かつメッセージの配信と削除を確実に行うには、どのようなパターンを使用すればよいのでしょうか。ご助力ありがとうございます。
解決方法を教えてください。
やり方が間違っているのでは?
同じキューを複数の異なることに使っているように見えます。1つのキューを1つの目的に使う方がよいでしょう。
イベントを 'registration-new' キューに入れ、2つの異なるサービスがそのキューをポーリングし、両方がそのメッセージを読む必要があり、両方で異なることをする(そして、他の2つがそれを処理した後にそのメッセージを削除することになっている第3のプロセスが必要)のではなく、です。
1つのキューは、1つの目的のために使用されるべきです。
-
index-user-search」キューと「send to mixpanels」キューを作成します。 検索サービスは、検索キューから読み込んで、ユーザーをインデックス化します。 というメッセージが表示され、すぐに削除されます。
-
mixpanel-serviceは、mix-panelsのキューから読み込み、そのキューにある
メッセージを削除します。
登録サービスは、1つのキューに 'registration-new' を発行する代わりに、2つのキューに発行するようになりました。
さらに一歩進んで、ここにSNSを追加して、登録サービスが「registration-new」トピック(キューではない)にSNSメッセージを発信し、そのトピックに、上で述べた両方のキューを「ファンアウト」パターンでサブスクライブするようにします。
https://aws.amazon.com/blogs/aws/queues-and-notifications-now-best-friends/
将来、第3の無関係なサービスも 'registration-new' イベントを処理する必要がある場合、別のキューを作成し、それを同様にトピックに登録します - それは、依存関係や他のサービスが何をしているかについての知識なしで実行できます - それが目標です。
関連
-
[解決済み】あなたのWSGIPathは、存在しないファイルを参照しています。
-
[解決済み] LATERAL VIEW EXPLODE in presto(ラテラルビュー エクスプロード イン プレスト
-
[解決済み] AWS::CloudFormation::Init どのように動作するのでしょうか?
-
[解決済み] AWS Secrets Managerで指定された秘密が見つからない
-
[解決済み] AWS-CLI: autoscalinggroupsをリストダウンする方法
-
[解決済み] RDS は、以下の組み合わせでの DB インスタンスの作成をサポートしていません。
-
[解決済み] アクセスポイントを経由してAmazon S3へのロールを認可する
-
[解決済み] SQSとRabbitMQの比較
-
[解決済み] AWS SNSとAWS SQSのFIFOキューを統合することは可能か?
-
[解決済み] Amazon SNSとAmazon SQSの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RDS コンソールで Aurora の読み取りレプリカを作成するオプションが表示されない
-
[解決済み] as select in redshiftに挿入する。
-
[解決済み] ec2 インスタンスのステータスチェックに失敗しました
-
[解決済み] AWS KinesisとEventBridgeの違いは何ですか?
-
[解決済み] Amazon S3におけるHeadBucket操作とは
-
[解決済み] プライマリネームサーバが親に登録されていない
-
[解決済み] DynamoDB Upsert - Update or Create?
-
[解決済み] AWSです。CloudFormationのテンプレートでbooleanパラメータを指定する方法
-
[解決済み] べき乗演算とは何ですか?
-
[解決済み] パスワードなしでec2インスタンスにscp(セキュアコピー)する