使用ActiveMQ集群的apachecamel

使用ActiveMQ集群的apachecamel,activemq,cluster-computing,apache-camel,Activemq,Cluster Computing,Apache Camel,我正在尝试确定集群ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项。我正在执行大容量消息处理,需要群集以实现高可用性和水平可扩展性 下面是我的应用程序的基本功能…HTTP->QUEUE->PROCESS->DATABASE->TOPIC 从(“码头:”) .to(“activemq:inboundQueue”) 来自(“activemq:inboundQueue?maxConcurrentConsumers=50”) .process(decode()) .pr

我正在尝试确定集群ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项。我正在执行大容量消息处理,需要群集以实现高可用性和水平可扩展性

下面是我的应用程序的基本功能…HTTP->QUEUE->PROCESS->DATABASE->TOPIC

从(“码头:”) .to(“activemq:inboundQueue”)

来自(“activemq:inboundQueue?maxConcurrentConsumers=50”) .process(decode()) .process(transform()) .process(验证()) .process(saveToDatabase()) .to(“activemq:topic:ouboundTopic”)

所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但仍然不确定该走哪条路

我知道我可以为HA使用主/从设置,但这无助于可伸缩性

我读过有关经纪人网络的文章,但不确定这是如何应用的。例如,如果我在集群中的多个节点上部署相同的驼峰路由,它们将如何“交互”呢?如果我将HTTP生产者指向一个节点(NodeA),哪些消息将被发送到NodeB?队列/主题是否在节点A/B之间共享?如果是,消息是如何分割或复制的?另外,外部客户端如何准确地订阅我的“outboundTopic”(并获取所有消息等)

或者,我一直认为我应该在多个ServiceMix实例之间共享一个代理。这会更干净,因为只有一组队列/主题需要管理,我可以通过添加更多实例来扩展。但是,现在我仅限于单个代理的可伸缩性,而我又回到了单个故障点


如果有人能为我澄清权衡的话……我将不胜感激

当您使用ServiceMix/Camel/ActiveMQ时,有多种策略可供扩展。因为每一款软件都提供了很多选择,所以根据应用程序需要扩展的部分,您可以选择不同的路径。以下是一些策略的高级别列表:

  • 增加入站Jetty实例的数量-这需要启动更多web服务器实例,或者跨多个实例进行负载平衡请求,或者公开多个URL,并将所有请求发送到ActiveMQ中的同一入站队列

  • 增加ActiveMQ实例的数量-通过启动其他ActiveMQ实例并将它们连接在一起,您正在创建一个代理网络。在某些圈子里,这被称为分布式队列,因为给定的队列可以在网络中的所有代理中使用。但是,如果要启动多个ActuMeq实例,就应该考虑启动Service MexIX的其他实例。p>
  • 增加ServiceMix实例的数量-ServiceMix的每个实例都嵌入一个ActiveMQ实例。通过增加ServiceMix实例的数量,不仅可以增加ActiveMQ实例的数量(可以通过网络连接在一起形成代理网络),而且还可以跨ServiceMix实例部署更多应用程序副本。如果需要增加ActiveMQ或ServiceMix实例的数量,则可以为每个实例部署具有适当数量并发使用者的消费应用程序。消息不会被拆分或复制,而是根据消费者的需求以循环方式分发给队列中的所有消费者,无论它们位于何处。也就是说,如果网络中的一个ActiveMQ实例没有使用者,那么它将不会在其队列实例上有任何消息被使用。这引出了我的最后一个建议,即增加轮询入站队列的消费者数量

  • 增加入站队列上JMS使用者的数量—这可能是提高吞吐量的最简单、最强大和最易管理的方法。这是最简单的,因为您正在部署消费应用程序的其他实例,以便它们竞争来自入站队列的消息(无论它们是竞争本地队列还是通过代理网络分布的队列)。这可能很简单,只需增加并发使用者的数量,或者通过拆分应用程序中包含使用者的部分并将其部署到ServiceMix的多个实例来增加一点。它是最强大的,因为它通常并不困难,而且扩展事件驱动的应用程序总是通过增加使用者的数量来完成的。它是最易于管理的,因为您可以更改应用程序的打包方式,从而使消费应用程序完全独立,从而使其具有分布式的能力

最后一个建议是扩展应用程序最有效的方法。只要传入HTTP端点可以处理大量流量,您可能只需要增加入站队列上的使用者。这样做的一个重要原因是,要么是消费者,要么是他们交给的豆子,正在做所有繁重的工作,主要是处理和验证。通常,这一过程最终需要最多的资源

希望这能提供您开始向一个方向或几个方向发展所需的信息,这取决于您实际需要扩展应用程序的哪个部分。如果你有任何问题,请告诉我


布鲁斯

布鲁斯,谢谢。我一直在使用“maxConcurrentConsumers”属性对入站队列中的消费者执行多线程操作。现在,我正试图采取下一步,将负载分布到多台机器上。因此,听起来我可以在代理网络中配置多个相同的SMX实例,这样就可以根据需要分配负载。MessageGroups是否仍然通过代理网络提供线程关联?此外,我需要使outboundTopic消息可供门户使用…将