长时间监听器,Stackoverflow上的第一次调用者:)
我有一个带有Producer和Consumer的ActiveMQ代理。生产者正在连接到activeMQ代理。有一个消费者连接到同一个经纪人。当我使用此设置发送消息P - > B - > C几乎没有延迟,消息以每条消息8ms的速率发送。
现在我添加另一个代理来创建代理网络并使用以下配置发送消息: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正在进行&gt;每封邮件240毫秒。这是activemq.log中的一些相关信息
2013-07-10 23:05:00,186 |追踪|运行任务迭代932 - 传输连接到:vm:// broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService [broker1] Task-3
2013-07-10 23:05:00,187 |调试|桥接(broker1 - &gt; 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] Task-3
2013-07-10 23:05:00,438 |追踪|运行任务迭代933 - 传输连接到:vm:// broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService [broker1] Task-3
2013-07-10 23:05:00,439 |调试|桥接(broker1 - &gt; 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] Task-3
2013-07-10 23:05:00,708 |追踪|运行任务迭代934 - 传输连接到:vm:// broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService [broker1] Task-3
2013-07-10 23:05:00,709 |调试|桥接(broker1 - &gt; 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] Task-3
2013-07-10 23:05:00,962 |追踪|运行任务迭代935 - 传输连接到:vm:// broker1#0 | org.apache.activemq.thread.PooledTaskRunner:128 | ActiveMQ BrokerService [broker1] Task-3
似乎代理经纪人数据传输需要很长时间。
我尝试设置persistent = false并使用KahaDB删除但没有任何成功。
答案 0 :(得分:1)
您所看到的是代理网络中存储转发的影响。当您从P发送消息时,它是:
消息代理网络的透明方式与常规网络不同。代理上的接收和分派机制通过消息存储器有效地彼此分离,消息存储器位于磁盘上或内存中。每个经纪人都是生产者和消费者之间的途径。所以在这方面我看到更高的延迟并不奇怪。我喜欢这样的比喻,就好像是一排人经过一桶水。
有关更详细的说明,请参阅Understanding ActiveMQ Broker Networks。