私は、いくつかのキューのプロデューサとして機能する小さなスプリングブートアプリケーションを持っています。それは次の依存関係を使用します:Spring AMQP - RabbitMQブローカへの同時公開がブロックされているようです
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
私は4つのスレッドを開始します。各タスク内では、ランダムなメッセージが最大サイズ10KBで作成されます。これらのメッセージは、AmqpTemplateからconvertAndSendメソッドを使用して直接交換に送信されます。スレッドごとに別々のチャネルが使用されます。今のところすべてがスムーズに走っています。
実行時にJava VisualVMを使用してJVMを調べました。私は4つのスレッドが動作しているのを見ることができましたが、少し驚いていました。スレッドはほとんどの場合、監視(ブロック)状態です。
java.lang.Thread.State: BLOCKED
at com.rabbitmq.client.impl.SocketFrameHandler.writeFrame(SocketFrameHandler.java:144)
- waiting to lock <1407a47> (a java.io.DataOutputStream) owned by "Thread-7" [email protected]
at com.rabbitmq.client.impl.AMQConnection.writeFrame(AMQConnection.java:514)
at com.rabbitmq.client.impl.AMQCommand.transmit(AMQCommand.java:102)
- locked <316a68> (a com.rabbitmq.client.impl.CommandAssembler)
at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:334)
- locked <1d8e172> (a java.lang.Object)
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:310)
- locked <1d8e172> (a java.lang.Object)
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:657)
だから、私には、平行出版ようには見えません:スタックトレースの一枚がある
http://i.stack.imgur.com/i8uX7.png
そしてここに:次のスクリーンショットを参照してください。
誰かがその動作が正しいかどうかを知ることができますか?私にとってはそうではないようですが、何がうまくいかないのか分かりません。
追加のマシンで同じプロデューサアプリケーションを開始すると、あたかもrabbitmqブローカがアクセスを同期しているかのように、ブロッキング状態が悪化しているようです。ブローカー自体は問題ありません。物理的な制限はありません。フロー制御なし。追加のプロデューサーアプリでは、着信メッセージレートもほぼ倍増します。
それは私には意味がありません。誰にもアイデアはありますか?私は心配する必要はありますか?
ありがとうございます!
これに関する結論はありますか?私は同じ問題に苦しんでいると思う – Jaskey