Java 如何使用虚拟目标创建activemq主题订阅服务器的多个实例?
我有一个发布者正在将消息推送到某个主题。我有多个订阅者,每个订阅者在使用该主题的消息后都执行不同的任务。 现在,我希望我的系统能够扩展到运行在不同主机/相同主机上的同一进程的多个实例。e、 g.我希望在不同的主机上运行应用程序A的多个副本,这样,如果A的一个实例运行缓慢,那么其他实例可以拉入后续消息并向前推进。。 我发现使用虚拟目的地是可能的。我按照这里的步骤- 但是,如何使用相同的客户端id设置同一主题的多个订阅者?当我尝试这样做时,我会出错。当我尝试其他方法时,它不起作用。有人能帮忙吗 通常,我通过执行以下步骤启动订户-Java 如何使用虚拟目标创建activemq主题订阅服务器的多个实例?,java,jms,messaging,activemq,Java,Jms,Messaging,Activemq,我有一个发布者正在将消息推送到某个主题。我有多个订阅者,每个订阅者在使用该主题的消息后都执行不同的任务。 现在,我希望我的系统能够扩展到运行在不同主机/相同主机上的同一进程的多个实例。e、 g.我希望在不同的主机上运行应用程序A的多个副本,这样,如果A的一个实例运行缓慢,那么其他实例可以拉入后续消息并向前推进。。 我发现使用虚拟目的地是可能的。我按照这里的步骤- 但是,如何使用相同的客户端id设置同一主题的多个订阅者?当我尝试这样做时,我会出错。当我尝试其他方法时,它不起作用。有人能帮忙吗 通
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL;);
activeMQConnection = connectionFactory.createConnection();
activeMQConnection.setClientID("subscriber1");
activeMQConnection.setExceptionListener(exceptionListener);
activeMQSession = activeMQConnection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
activeMQTopic = activeMQSession.createTopic("myTopic");
activeConsumer = activeMQSession.createDurableSubscriber(activeMQTopic, "myTopic");
activeConsumer.setMessageListener(messageListener);
activeMQConnection.start();
当我尝试创建第二个订阅者并将主题名作为“VirtualTopic.myTopic”传递时,什么都没有发生
谢谢一旦您了解虚拟主题功能,它将非常简单且功能强大
- 在主题名称中使用
,例如VirtualTopic.
(可以配置此前缀)VirtualTopic.Orders
- 使用
作为您要访问的队列的名称。比如Consumer.
,其中ApplicationA实际上是您的客户idConsumer.ApplicationA.VirtualTopic.Orders
- 对上述队列使用常规订阅服务器,而不是持久订阅服务器
string activeMqConsumerTopic = "Consumer.AmqTestConsumer.VirtualTopic.Orders";
IQueue queue = SessionUtil.GetQueue(session, activeMqConsumerTopic);
IMessageConsumer consumer = session.CreateConsumer(queue);
每当消费者的第一个实例被订阅时,就会自动为其创建队列。从那时起,发送到topic的所有消息都会复制/复制到所有关联的队列中
希望这有帮助。虚拟主题是您的答案。但是,必须为所有虚拟主题队列定义命名标准。以下是答案: 虚拟主题有助于实现以下目标: 1.消息的负载平衡 2.订阅服务器的快速故障切换 3.为不同的生产商和消费者重复使用相同的连接工厂。(持久订阅者需要一个唯一的JMS客户机Id,并且该Id不能用于任何其他生产者或消费者) 下面是一个创建前缀VTCON.*的示例。因此,每个在末尾具有此前缀和主题名称的队列都将使用该消息
@vinod您提到了这些[link]()。我在那个链接中看到了xml代码。在哪里可以找到那个xml文件。