负载均衡 MessageQ (ActiveMQ)

Posted

技术标签:

【中文标题】负载均衡 MessageQ (ActiveMQ)【英文标题】:Load balancing MessageQ (ActiveMQ) 【发布时间】:2015-02-09 09:05:48 【问题描述】:

这是我的场景..

1) 基于 REST 的 Web 服务(例如 X)接收请求并将其放入 ActiveQ 2) Q 的另一端有一个监听器,它将读取和处理消息。这是异步的

我决定使用 ActiveMQ。 但试图找到一个解决方案,让我可以 Q 和 Q 侦听器可扩展。

1) 我有很多 X 实例正在运行。因此,Q 有多个刺激因素。 2)订购对我很重要。 3) 由于我的 REST 服务是会话较少的,我没有办法用相同的消息 ID 标记一堆请求。 4)现在,如果我使用单个 Q,它可以正常工作..

但我想扩大规模并使用多个 Q 和多个 Q 消费者而不影响订单。

有人可以建议我解决这个问题吗?

非常感谢,

【问题讨论】:

【参考方案1】:

为了实现消息的排序,activeMQ 中定义了两种方式

1)基于 JMSXGroupID 的消息组

2)独家消费者

消息组比独占消费者更有用,因为在内部独占消费者一次只使用一个消费者,但如果该消费者失败,它会连接到其他消费者。

您可以在此处阅读 ActiveMQ 文档

http://activemq.apache.org/how-do-i-preserve-order-of-messages.html

希望这会有所帮助! 祝你好运!

【讨论】:

【参考方案2】:

我们可以使用以下类型的连接 URL 来利用 ActiveMQ 负载......

failover://(tcp://192.nnn.nn.nn:61616,tcp://192.nnn.nn.nn:61616)?randomize=false

randomize=true 将在主动模式下的两个 AciveMQ 之间进行消息洗牌,而不是仅仅通过 ActiveMQ 的故障转移......

可以在以下 Apache 站点链接下找到完整的参考资料......

http://activemq.apache.org/failover-transport-reference.html

但高可用性(即集群)配置仍然使您的应用程序稳定,尽管 Apache 必须提高 ActiveMQ 高可用性,因此事情可以更顺利地工作。

虽然因为KahaDB 限制负载平衡/容错配置受到限制。当前的 Apache ActiveMQ 高可用性配置可在以下链接中找到。

http://activemq.apache.org/clustering.html

但是KahaDB 有文件锁定限制,可以进行以下调整/替代配置方式...

1) 共享文件系统主从,- 一个共享文件系统,如 SAN http://activemq.apache.org/shared-file-system-master-slave.html

2)JDBC Master Slave,- 共享数据库 http://activemq.apache.org/jdbc-master-slave.html

3) 复制的 LevelDB 存储,- ZooKeeper 服务器 http://activemq.apache.org/replicated-leveldb-store.html

通过拥有 JCA 连接器,- 像 JBoss、Weblogic、Websphere、Geronimo、Glassfish 之类的 AS,- 可以将 ActimeMQ 修补作为一种资源适配器。并且使用 Apache Camel (karaf),可以完成 JBoss Fuse ESB 类产品 HA 和 ActiveMQ 集群。

【讨论】:

以上是关于负载均衡 MessageQ (ActiveMQ)的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ实现负载均衡+高可用部署方案

ActiveMQ实现负载均衡+高可用部署方案(转)

ActiveMQ实现负载均衡+高可用部署方案

JMS之——ActiveMQ高可用+负载均衡集群

ActiveMQ 集群负载平衡

activeMQ能不能配置多个实例的负载均衡,并只连接一个MySQL,将消息持久化存入到一个数据库中?