如何避免只连接到 ActiveMQ 中的一个代理?

Posted

技术标签:

【中文标题】如何避免只连接到 ActiveMQ 中的一个代理?【英文标题】:how to avoid connecting to just one broker in ActiveMQ? 【发布时间】:2016-03-29 22:58:48 【问题描述】:

我们已经部署了一个使用 P2P 模型的代理集群。数据分布在整个集群中。我们的许多消费者使用相同的地址“failover:(tcp://ip1:61616,tcp://ip2:61616,tcp: //ip3:61616,tcp://ip4:61616,tcp:/ip5:61616)?nested.wireFormat.maxInactivityDuration=1000" .但是最后,我们发现很多消费者会连接同一个broker,使得数据不在broker上,从其他broker传输过来。这种传输占用带宽很大。 我该如何解决平衡问题?消费者如何决定使用哪个代理?

例如,我们有 3 个代理,所有代理都配置了以下 sn-p:

<transportConnectors>       
     <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximum
Connections=1000&amp;wireFormat.maxFrameSize=104857600" updateClusterClients="true" rebalanceClusterClients="true" updateClusterClientsOnRemove="true" discoveryUri="multicast://default" />
</transportConnectors>

<networkConnectors>  
    <networkConnector  uri="multicast://default"/>  
</networkConnectors>

在消费者程序中,我使用“failover:(tcp://broker1:61616,tcp://broker2:61616)?nested.wireFormat.maxInactivityDuration=1000”作为代理地址。 我运行了三个消费者进程,但发现所有三个进程最终都连接到broker1IP,这导致broker2中的数据,broker3被传输到broker1进行消费。 这会导致巨大的网络负担。

【问题讨论】:

【参考方案1】:

我假设您正在寻找代理中消息的负载平衡,您可以使用代理网络来解决问题,查看此链接以获取更多信息http://activemq.apache.org/networks-of-brokers.html

【讨论】:

我已阅读文档但找不到解决方案。我已更新我的问题描述以进一步澄清我的问题。谢谢。 使用发现协议连接代理而不是故障转移,你可以在activemq.apache.org/discovery-transport-reference.html找到解释

以上是关于如何避免只连接到 ActiveMQ 中的一个代理?的主要内容,如果未能解决你的问题,请参考以下文章

Apache ActiveMQ Artemis 客户端能否连接到现有的 ActiveMQ 代理 5.15.X?

activemq http代理

Python stompest 无法通过 SSL 连接到 ActiveMQ

为啥我的客户端应该只连接到一个子节点集群工作人员时接收来自所有子节点集群工作人员的套接字发射?

5000 毫秒后无法连接到代理 URL [JMS]

ActiveMQ NMS:当代理关闭时,connection.start() 使用故障转移协议挂起