HornetQ ストア アンド フォワード メカニズムを使用しようとしていますが、コア ブリッジを使用して 1 つのスタンドアロン HornetQ インスタンスから別のインスタンスにメッセージを転送するのは非常に遅くなります。1 秒あたり 200 メッセージを超えるスループット レートを上げることはできませんでした。
驚くべきことに、同じクライアント (メッセージを転送する HornetQ インスタンスにパブリッシュしていたクライアント) を宛先 HornetQ インスタンスで直接指定すると、1 秒あたり 1000 メッセージを超えるスループット レートが観測され始めます (このクライアントは JMS ベースです)。これは基本的に、Forwarding HornetQ インスタンスと宛先 HornetQ インスタンスの間に設定されたコア ブリッジに問題があることを意味します。
以下は、Forwarding HornetQ でコアブリッジを設定するための関連セクションです。
<connectors>
<connector name="netty-bridge">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="destination.xxx.com"/>
<param key="port" value="5445"/>
<param key="batch-delay" value="50"/>
<param key="tcp-send-buffer-size" value="1048576"/>
<param key="tcp-receive-buffer-size" value="1048576"/>
<param key="use-nio" value="true"/>
</connector>
</connectors>
<address-settings>
<address-setting match="jms.queue.Record">
<dead-letter-address>jms.queue.RecordDLQ</dead-letter-address>
<max-size-bytes>262144000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
</address-setting>
</address-settings>
<queues>
<queue name="jms.queue.Record">
<address>jms.queue.Record</address>
</queue>
</queues>
<bridges>
<bridge name="core-bridge">
<queue-name>jms.queue.Record</queue-name>
<forwarding-address>jms.queue.Record</forwarding-address>
<retry-interval>1000</retry-interval>
<retry-interval-multiplier>1.0</retry-interval-multiplier>
<reconnect-attempts>-1</reconnect-attempts>
<confirmation-window-size>10485760</confirmation-window-size>
<static-connectors>
<connector-ref>netty-bridge</connector-ref>
</static-connectors>
</bridge>
</bridges>
以下は、宛先 HornetQ でコアブリッジを設定するための関連セクションです。
<acceptors>
<acceptor name="netty">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
<param key="host" value="${hornetq.remoting.netty.host:192.168.2.xxx}"/>
<param key="port" value="${hornetq.remoting.netty.port:xxxx}"/>
<param key="tcp-send-buffer-size" value="1048576"/>
<param key="tcp-receive-buffer-size" value="1048576"/>
<param key="use-nio" value="true"/>
<param key="batch-delay" value="50"/>
<param key="use-nio" value="true"/>
</acceptor>
<acceptors>
<address-settings>
<address-setting match="jms.queue.Record">
<dead-letter-address>jms.queue.RecordDLQ</dead-letter-address>
<max-size-bytes>262144000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
</address-setting>
</address-settings>
<queues>
<queue name="jms.queue.Record">
<address>jms.queue.Record</address>
</queue>
</queues>
すべてのシステム変数 (CPU/メモリ/ディスク IO/ネットワークなど) は十分に活用されておらず、ログにエラーはありません。
注: NIO とレガシー/古い IO の両方を試しました。これは、HornetQ-2.2.5-Final と HornetQ-2.2.8-GA の両方で試行されました (2.2.8-GA はソースからビルドされました)。
この問題の原因と解決策について何か考えはありますか?
その他の観察事項: コア ブリッジを介して送信されているメッセージはトランザクションに対応しているように見えます...したがって、これらのトランザクションをバッチ処理して、2 つの HornetQ インスタンス間の通信を非同期に行うことは可能ですか?