우리는 HornetQ 저장 및 전달 메커니즘을 사용하려고합니다 ... 그러나 코어 브리지를 사용하여 하나의 독립형 HornetQ 인스턴스에서 다른 하나의 HornetQ 인스턴스로 메시지를 전달하는 것은 매우 느립니다. 우리는 초당 200 개 이상의 메시지 처리 속도를 높일 수 없었습니다.HornetQ 코어 브리지를 사용하여 매우 낮은 처리량
놀라운 사실은 대상 HornetQ 인스턴스에서 동일한 클라이언트 (즉, 전달 HornetQ 인스턴스에 메시지 게시)를 지시하면 우리는 초당 1000 개 이상의 메시지 처리 속도를 관찰하기 시작합니다 (이 클라이언트는 JMS입니다. 기반). 이것은 기본적으로 전달 HornetQ 인스턴스와 대상 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>
다음
<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에 핵심 다리를 구성하는 관련 부분입니다 : 다음
는 전달 HornetQ에 핵심 브리지를 구성하기위한 관련 부분입니다 모든 시스템 변수 (CPU/메모리/디스크 IO/네트워크/등)는 충분히 활용되지 않으며 로그에 오류가 없습니다.참고 : 우리는 NIO와 레거시/구형 IO를 모두 시도했습니다. 이것은 HornetQ-2.2.5-Final과 HornetQ-2.2.8-GA (2.2.8-GA는 출처에서 만들어졌습니다)와 함께 시도되었습니다.
이 문제의 원인과 해결 방법 아마도?
다른 관찰 : 메시지가 코어 브릿지를 통해 전송되는 것처럼 보이는 것은 트랜잭션입니다 ... 이러한 트랜잭션을 일괄 처리하고 두 HornetQ 인스턴스 간의 통신을 비동기 적으로 수행 할 수 있습니까?
이것은 버그 수정 –