문제

우리가 사용하려고 HornetQ 저장소 및 전달 메커니즘...그러나 메시지 전달에서 하나 독립형 HornetQ 인스턴스를 사용하여 또 다른 핵심 브리지는 매우 느립니다.우리는 할 수 없었을 증가 처리량 평가 200 개가 넘는 메시지합니다.

놀라운 사실은 우리가 우리점 동일한 클라이언트(는 게시하는 메시지를 전달 HornetQ 인스턴스)에 직접 대상에서 HornetQ 를 들어,우리는 시작을 관찰하는 처리 속도 1000 이상의 초당 메시지(클라이언트가 JMS 기반).이것이 기본적으로 의미 있는 핵심 브리지 구성된 사이에 전달 HornetQ 인스턴스와 목적지 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/Memory/디스크 입출력/네트워크/등이 있습니다.) 는 낮에 오류가 있습니다.

참고:리스도와 함께 양모 뿐 아니라 유산/old IO.이 시도 되었습니다 모두 HornetQ-2.2.5-최종 HornetQ-2.2.8-GA(2.2.8-GA 내에서 원본)

어떤 생각을 할 수 있습니다 무엇이 문제를 일으킬하고 무엇을 해결 할 수 있을까요?

다른 관찰:그것은 다음과 같은 메시지가 전송되는 것을 통해 핵심가 다리는 트랜잭션...그래서 그것을 가능하게 배치한 이러한 트랜잭션과 통신의 두 HornetQ 경우 비동기적으로 발생?

도움이 되었습니까?

해결책

OK..이 밖으로 나 자신을 위해.

때 전달 HornetQ 에 다리를 만드,내부적으로 사용하는 단 하나의 스레드를 위해 보내는 메시지를 통해 브리지 및 엽 하나의 연결만을 대상 HornetQ.이와 같이,그렇지 않을 활용할 수 있는 여러 프로세서와는 또한 제한 의 네트워크(기 대역폭/rtt)과할 수 없을 효과적으로 병렬화하 보내는 메시지입니다.이와 같은 경우,높은 처리량을 타격을 시작 모자(에서 우리의 경우는 약 200 메시지 초당).할 수 있는 높이 조정하여 HornetQ 커넥터와 수락자를 가진 매개변수(다음과 같 TCP 전송 및 수신 버퍼 크기)및 다리 설정(확인 창 크기)하지만 하는 걸릴 수 있습니다 당신이 그렇게 긴(우리 처리까지 약 300 메시지 초당).

이 솔루션을 만드는 여러리 사이의 동일한 쌍 전달하고 목적지 HornetQ 인스턴스(을 포함하는 동일한 큐).이를 효과적으로 병렬화하여 메시지를 전송하고 따라서 처리량이 증가합니다.을 만드는 세 가지 교량의 거의 배 처리량을 870 메시지합니다.

JBoss 필요 이상적으로 이 병렬화 구성에서 핵심 bridge.

다른 팁

나는 당신이 2.2.5를 사용하고 있다고 믿는다 (당신이 말하는 문제를 일으키는 다리에 버그가있는 버그가있는 버전이있는 버전이있었습니다.

일부 버전에서는 비동기 확인을 계산하는 대신 다리가 동기식으로 메시지를 보내고있었습니다.

최신 버전에서 어떻게 작동하는지 살펴보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top