我们正在尝试使用HornetQ存储和转发机制......但是将消息从一个独立的HornetQ实例转发到另一个使用核心网桥的消息非常缓慢。我们无法将吞吐量提高到每秒200条消息以上。使用HornetQ核心网桥的吞吐量非常低
令人惊讶的事实是,如果我们直接在目的地HornetQ实例指向同一客户端(即将消息发布到转发HornetQ实例),我们开始观察每秒超过1000条消息的吞吐率(该客户端是JMS基于)。这基本上意味着在Forwarding HornetQ实例和Destination HornetQ实例之间配置的核心网桥存在问题。
以下是配置上的转发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从源头构建)两方面尝试过。
任何有关可能导致此问题的原因以及解决方案可能?
其他意见:它看起来像通过核心桥发送的消息是事务性的...所以可以批量处理这些事务,并让两个HornetQ实例之间的通信异步发生?
这是一个修正的问题 – 2012-05-10 21:17:13