2017-11-01 12 views
0

サービスA、B、Cの3つのマイクロサービスがあります。 サービスAはBとCを非同期に呼び出す必要があります。マイクロサービス - マイクロサービス間の非同期呼び出しAMQP/RabbitMQベストパターン

私はasync ipcにRabbit MQを使用しています。

試したRabbitTemplateのdirectSearchAndRecieveをdirect-replyToオプションで使用すると、現在の処理スレッドは非同期呼び出しを完了するまで待ちます。

convertAndSendを使用して、サービスAが応答キューでリッスンし、相関IDに基づいて処理することは望ましくありません。応答キューに何千もの応答があり、相関IDに基づいてメッセージをマッピングすると、パフォーマンス。

セッションごとに別々のキューを作成するオプションのいずれか、独自の警告のために(新しいキューの作成影響に関する全てのクラスタあまりにもパフォーマンスから承認を取得)ではありません

申し訳ありませんが、この問題は、私はcouldntの、以前に解決されている場合インターネット上でこれについて多くの助けを得る。どんな助けもありがとう。

答えて

1

あなたの目的のためにAsyncRabbitTemplateが応答するまでの呼び出し元をブロックしないがあります:https://docs.spring.io/spring-amqp/docs/2.0.0.RELEASE/reference/html/_reference.html#async-template

バージョン1.6はAsyncRabbitTemplateを導入しました。これは、AmqpTemplateのものと同様のsendAndReceive(およびconvertSendAndReceive)メソッドを持ちますが、ブロックする代わりに、ListenableFutureを返します。

RabbitConverterFuture<String> future = this.template.convertSendAndReceive("foo"); 
future.addCallback(new ListenableFutureCallback<String>() { 

    @Override 
    public void onSuccess(String result) { 
     ... 
    } 

    @Override 
    public void onFailure(Throwable ex) { 
     ... 
    } 

}); 
+0

どうもありがとう。私が探していたまさに。 – Ganny

関連する問題