2017-06-15 59 views
0

假设我有3个订户A,B,C代表一个主题,并且我希望A,B被视为“同一订户”,这意味着他们只能获得每个消息的一个副本。而C又有了一份。Activemq主题负载平衡没有虚拟目的地?

我发现http://activemq.apache.org/virtual-destinations.html是一种方式。但是如果我不能更改activemq代理的配置呢?

我不知道是否有一些“id”道具,可以让两个订户被视为一个吗?像kafka中的组ID?

回答

2

我认为你从客户端使用JMS。 ActiveMQ 5.x仅支持不支持负载均衡主题的JMS 1.1。 JMS 2.0在ActiveMQ Artemis中实现并实现,但这是另一种产品。

但是,您可以在不更改配置的情况下使用虚拟主题,但必须更改主题和队列的命名。

发布到主题:VirtualTopic。[TopicName]并从队列中消费:Consumer。[LogicalConsumerId] .VirtualTopic。[TopicName]。

I.e.

发布命令VirtualTopic.Orders

从消费:

  • Consumer.ManufacturingSystem.VirtualTopic.Orders
  • Consumer.CRMSystem.VirtualTopic.Orders

随着消费者从队列中消费,他们可以使用不同(或不)的ClientId,并且仍然在每个系统中的节点之间进行负载均衡。即CRMSystem可能有两个节点,总共只会收到一条消息。

如果您更改ActiveMQ配置,但可以使用OOTB,则可以自定义此命名约定。