0

アプリケーションコンテキスト間でイベントを渡すための統合フローを簡単に構築するために、IntegrationFlowFactoryを構築しようとしています。Spring統合を使用してrabbitmqからメッセージを消費するように最適化

すべてが機能しているようで、イベントは非常に速く公開されています。

しかし、私は消費がとても遅い理由を理解できません。 concurrentConsumersを追加したり、prefetchCountを変更しても何も変更されていないようです。

他の記事はネットワークが遅いと話していますが、RabbitConfigでわかるように、私はlocalhostを使っています。

私はここに私の春の統合例でリポジトリ持っている:あなたの問題はここにある https://github.com/teplyuska/spring-integration-example

+0

プリフェッチを「何も変更していないように見える」場合は、リスナーコードに問題がある可能性があります。あなたのアプリをプロファイルする時間。 10から100になると違いはないかもしれませんが、確かに1から10になります(リスナーが軽い場合)。 –

+0

サンプルをローカルにプルして少し再生します。 –

+0

concurrentConsumersを追加すると、スループットは向上しますが、コンシューマあたりのスループットは非常に低くなります。 – heuts

答えて

1

を:

Amqp.inboundGateway(getListenerContainer(queue, concurrentConsumers, prefetchCount) 

はまた、あなたの下流の流れは、一方向であり、任意の応答を返しません。 :

.handle(p -> { 
       UpdateSecretEvent payload = (UpdateSecretEvent) p.getPayload(); 
       System.out.println("Account: " + payload.getAccountId() + " has secret: " + payload.getNewSecret()); 
}) 
.get(); 

または

.handle(p -> { 
       UpdateEmailEvent payload = (UpdateEmailEvent) p.getPayload(); 
       System.out.println("Account: " + payload.getAccountId() + " has email: " + payload.getEmail()); 
}) 
.get(); 

ので、トリックはありませんAmqp.inboundAdapter()への切り替えprivate static final long DEFAULT_TIMEOUT = 1000L;

のためにそのMessagingTemplate.sendAndReceive()で返信用AmqpInboundGateway待機しています。

関連する問題