长时间的监听器,Stackoverflow 上的第一次调用者 :)
我有一个带有生产者和消费者的 ActiveMQ 代理。生产者正在连接到一个 activeMQ 代理。有一个消费者连接到同一个代理。当我使用此设置 P -> B -> C 发送消息时,几乎没有延迟,并且消息以每条消息 8 毫秒的速率发送。
现在我添加另一个代理来创建代理网络并使用以下配置发送消息: P -> B1 -> B2 -> C 每条消息最多需要 80 毫秒。
附加信息:
P 和 B1 在同一个数据中心 DC1。
B2 和 C 位于同一个数据中心 DC2。
DC1和DC2是同一海岸的两个不同的数据中心,ping延迟约20-30ms。
我正在使用 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 | 调试 | 桥接(broker1 -> broker2)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 | 调试 | 桥接(broker1 -> broker2)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 | 调试 | 桥接(broker1 -> broker2)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 删除,但没有成功。