2つのソースサーバーserver#0とserver#1、およびターゲットサーバーserver#2があります。各ソースサーバーには、サーバー#2に接続するためのコアブリッジがあります。(すべてのサーバーはスタンドアロンで2.2.14)
- server#0にはキューがありますq#0(ソース)
- サーバー#1にはキューがありますq#1(ソース)
- サーバー#2にはキューがありますq#2(ターゲット)
このシナリオを考えてみましょう。
- クライアントはq#0にメッセージを送信します
- q#2はすべてのメッセージを正常に受信します(ブリッジ経由)
- クライアントはq#1にメッセージを送信します
- server#2によると:重複メッセージが(メッセージごとに)検出され、q#1からq#2に何も追加されていません
q#1からメッセージを受信したときのServer#2メッセージ
[Old I/O server worker (parentId: 2184190, [id: 0x002153fe, localhost/127.0.0.1:6445])]
14-Nov 13:38:27,300 WARNING [PostOfficeImpl] Duplicate message detected through the bridge - message will not be routed.
Message information: ServerMessage[messageID=25769805298,priority=4, bodySize=302,expiration=0, durable=true, address=jms.queue.target, properties=TypedProperties[{_HQ_BRIDGE_DUP=[B@1ff447b}]]@32041289
クライアントがq#0ではなくq#1にメッセージを送信し始めてから、q#0にメッセージを送信し始めると、この問題が再び発生したことに注意してください。(q#1メッセージの場合)
バグですか?私は何をすべきか?
サーバー#0(hornetq-configuration):
<queues>
<queue name="jms.queue.source">
<address>jms.queue.source</address>
</queue>
</queues>
<bridges>
<bridge name="bridge-to-server2">
<queue-name>jms.queue.source</queue-name>
<forwarding-address>jms.queue.target</forwarding-address>
<reconnect-attempts>-1</reconnect-attempts>
<static-connectors>
<connector-ref>remote-connector</connector-ref>
</static-connectors>
</bridge>
</bridges>
<!-- connector to server#2 -->
<connector name="remote-connector">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory
</factory-class>
<param key="host" value="localhost" />
<param key="port" value="6445" />
</connector>
サーバー#1(hornetq-configuration):
<queues>
<queue name="jms.queue.source">
<address>jms.queue.source</address>
</queue>
</queues>
<bridges>
<bridge name="bridge-to-server2">
<queue-name>jms.queue.source</queue-name>
<forwarding-address>jms.queue.target</forwarding-address>
<reconnect-attempts>-1</reconnect-attempts>
<static-connectors>
<connector-ref>remote-connector</connector-ref>
</static-connectors>
</bridge>
</bridges>
<!-- connector to server#2 -->
<connector name="remote-connector">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory
</factory-class>
<param key="host" value="localhost" />
<param key="port" value="6445" />
</connector>
サーバー#2(hornetq-configuration):
<connectors>
<connector name="netty-connector">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory
</factory-class>
<param key="host" value="localhost" />
<param key="port" value="6445" />
</connector>
</connectors>
<acceptors>
<acceptor name="netty-acceptor">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory
</factory-class>
<param key="host" value="localhost" />
<param key="port" value="6445" />
</acceptor>
</acceptors>
サーバー#2(hornetq-jms):
<queue name="target">
<entry name="/queue/target" />
</queue>