1

Amazon SQSサービスの使用を開始したので、誰かが私を正しい方向に導くことができるかどうか疑問に思っています。 クライアントにさらされた残りのWeb-APIインターフェイスがある場合、各HTTP要求の後に、データベース内の特定のエンティティを作成し、いくつかのロジックを処理する責任を負う別のサービスに非同期メッセージを送信します。このような何か:Web APIでmessaging(Amazon SQS)を使用して作成したIDをクライアントに返す方法

 var auctionRegistrationCommand = AuctionRegistrationCommand 
      .CreateFromRequest(lotId, request); 

     //var sqsClient = new AmazonSQSClient(); 
     //var response = sqsClient.SendMessageAsync(..resitrationCommaon..); 

エンティティの後は、私は私のクライアントに作成したエンティティのIDを返すようにしたい作成されるので、それを更新したり、APIを休めるためにいくつかの追加の呼び出しを行うためにそれを使用することができます。しかし、私はそれを行う方法を見つけることができません。そのようなシナリオをサポートする方法やアプローチはありますか? Amazon SQSを使用していくつかの例を見るのは完璧ですが、一般的な説明も本当に役立ちます。

+0

最初の部分はSQSのユースケース、2番目の部分はSNSのユースケースです。 1つの簡単な方法は、クライアントにステータスをポーリングすることです。 – at0mzk

+0

片方向メッセージングを使用する場合は、同期通信を避ける必要があります。クライアントはid(GUIDを使用して)を生成する必要があり、バックエンドはそれを使用してレコードを作成します。理にかなっている? –

答えて

0

のは、あなたの2つのシステムを言ってみましょう、次の問題が発生したS1とS2、されています

  1. S1は、SQSにメッセージを送信します。このステップは非同期です。
  2. S2は必要なエンティティを作成します。
  3. S1は、新しく作成されたエンティティIDを発信者に通知することが予想されます。

#3は、非同期システムの本質を考えると、単純ではありません。たとえば、S2がお客様のリクエストをいつ処理するかはわかりません。

考えられる解決策:

  1. S1は、SQSにメッセージを送信します。 SQSは応答としてMessageIdを返します。このMessageIdをクライアントに返します。
  2. S1とS2の両方には、MessageIdのマッピングをentity-idに格納する共有データストア(たとえば、Memcache、MySQLなど)があります。 S2がメッセージを処理して新しいエンティティを作成すると、共有データストア内のこのマッピングが更新されます。
  3. クライアントはS1をMessageIdでポーリングします。 S1は、nullでないときは常に、データストアからのマッピングを返します。

SQSのSendMessage APIのMessageIdのドキュメントはhereです。

関連する問題