2016-09-05 3 views
4

私は、いくつかのキューのプロデューサとして機能する小さなスプリングブートアプリケーションを持っています。それは次の依存関係を使用します: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ブローカがアクセスを同期しているかのように、ブロッキング状態が悪化しているようです。ブローカー自体は問題ありません。物理的な制限はありません。フロー制御なし。追加のプロデューサーアプリでは、着信メッセージレートもほぼ倍増します。

それは私には意味がありません。誰にもアイデアはありますか?私は心配する必要はありますか?

ありがとうございます!

+0

これに関する結論はありますか?私は同じ問題に苦しんでいると思う – Jaskey

答えて

0

おそらく、これが問題である:

https://groups.google.com/forum/#!topic/rabbitmq-users/15cv2qroCps

私もそれに直面して、この機能が理由です:

のRabbitMQサーバは コンピュータにインストールされているRAMの合計量を検出します起動時およびrabbitmqctl set_vm_memory_high_watermark が実行されたとき。既定では、RabbitMQサーバーが搭載RAMの40%以上の を使用すると、メモリアラームが発生し、メッセージを公開しているすべての 接続がブロックされます。

このスレッシュホールド/プラスメモリをマシンに追加すると、修正できます。

http://www.rabbitmq.com/memory.html

関連する問題