我們正在嘗試使用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