長年のリスナー、Stackoverflow での初めての呼び出し元:)
プロデューサーとコンシューマーを備えた ActiveMQ ブローカーがあります。プロデューサーは、activeMQ ブローカーに接続しています。同じブローカーにアタッチされているコンシューマーがあります。このセットアップ P -> B -> C でメッセージを送信すると、遅延はほとんどまたはまったくなく、メッセージはメッセージあたり 8 ミリ秒の速度で送信されます。
次に、別のブローカーを追加して、ブローカーのネットワークを作成し、次の構成を使用してメッセージを送信します: P -> B1 -> B2 -> C メッセージごとに 80 ミリ秒かかります。
追加情報:
P と B1 は同じデータ センター DC1 にあります。
B2 と C は同じデータセンター DC2 にあります。
DC1 と DC2 は同じ海岸にある 2 つの異なるデータ センターであり、ping の遅延は約 20 ~ 30 ミリ秒です。
activemq tarball に同梱されているデフォルトの構成を使用しています。私が追加した唯一の構成は、ブローカーを接続してブローカーのネットワークを作成することでした。
B1 で、次の構成を activemq.xml に追加しました
<networkConnectors>
</networkConnectors>
B2 では、次の構成を activemq.xml に追加しました。
<networkConnectors>
<networkConnector name="B2" uri="static://(tcp://b1.prod.xxx.com:61616)" duplex="true"/>
</networkConnectors>
これは全二重接続であり、B2 はファイアウォールの背後にあるため、宣伝どおりに機能します。
追加されたレイテンシが非常に高い理由について考えてみてください。10 倍の遅延は許容できません。プロデューサーの数が増えると、さらに悪化する可能性があります。
私は何か間違ったことをしていますか?
編集:
B1 から B2 へのメッセージの送信に、メッセージごとに 240 ミリ秒以上かかっていることがわかります。ここにactivemq.logの関連情報があります
2013-07-10 23:05:00,186 | トレース | 実行中のタスク反復 932 - 転送先: vm://broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,187 | デバッグ | ブリッジ (ブローカー 1 -> ブローカー 2) ActiveMQBytesMessage {...} ActiveMQBytesMessage {...}、コンシューマー: ID:broker1-50755-1373522507018-2:1:1:2、宛先トピック://LogMessageTopic.Server.xxx.com 、brokerPath: [ID:broker1-50755-1373522507018-0:1]、メッセージ: ActiveMQBytesMessage {...} ActiveMQBytesMessage{ bytesOut = null、dataOut = null、dataIn = null } | org.apache.activemq.network.DemandForwardingBridgeSupport:974 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,438 | トレース | 実行中のタスク反復 933 - 転送先: vm://broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,439 | デバッグ | ブリッジ (ブローカー 1 -> ブローカー 2) ActiveMQBytesMessage {...} ActiveMQBytesMessage{...}、コンシューマー: ID:broker1-50755-1373522507018-2:1:1:2、宛先トピック://LogMessageTopic.Server.xxx.com 、brokerPath: [ID:broker1-50755-1373522507018-0:1]、メッセージ: ActiveMQBytesMessage {...} ActiveMQBytesMessage{ bytesOut = null、dataOut = null、dataIn = null } | org.apache.activemq.network.DemandForwardingBridgeSupport:974 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,708 | トレース | 実行中のタスク反復 934 - 転送先: vm://broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,709 | デバッグ | ブリッジ (ブローカー 1 -> ブローカー 2) ActiveMQBytesMessage {...} ActiveMQBytesMessage{...}、コンシューマー: ID:broker1-50755-1373522507018-2:1:1:2、宛先トピック://LogMessageTopic.Server.xxx.com 、brokerPath: [ID:broker1-50755-1373522507018-0:1]、メッセージ: ActiveMQBytesMessage {...} ActiveMQBytesMessage{ bytesOut = null、dataOut = null、dataIn = null } | org.apache.activemq.network.DemandForwardingBridgeSupport:974 | ActiveMQ BrokerService[broker1] タスク-3
2013-07-10 23:05:00,962 | トレース | 実行中のタスク反復 935 - 転送先: vm://broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService[broker1] タスク-3
ブローカー間のデータ転送に時間がかかっているようです。
persistent=false を設定して、KahaDB を使用して削除しようとしましたが、成功しませんでした。