Jms 能否为ActiveMQ提供备份持久订户

Jms 能否为ActiveMQ提供备份持久订户,jms,activemq,amq,Jms,Activemq,Amq,我有一个用于JMS消息传递的主/从AMQ代理设置。我有两台服务器,我想使用ApacheCamel将它们设置为主/从持久用户。我们已经通过让两台服务器尝试使用相同的客户机ID进行连接来实现这一点。一个节点处理所有工作,但如果它发生故障,另一个节点将进行连接并立即恢复工作。这对于一次只有一个消费者来说效果很好,但它会在断开连接的服务器的日志文件中发出噪音 ERROR org.apache.camel.component.jms.DefaultJmsMessageListenerContainer]

我有一个用于JMS消息传递的主/从AMQ代理设置。我有两台服务器,我想使用ApacheCamel将它们设置为主/从持久用户。我们已经通过让两台服务器尝试使用相同的客户机ID进行连接来实现这一点。一个节点处理所有工作,但如果它发生故障,另一个节点将进行连接并立即恢复工作。这对于一次只有一个消费者来说效果很好,但它会在断开连接的服务器的日志文件中发出噪音

 ERROR org.apache.camel.component.jms.DefaultJmsMessageListenerContainer] 
(Camel (spring-context) thread #0 - JmsConsumer[global.topic.event]) Could 
not refresh JMS Connection for destination 'global.topic.event' - retrying 
using FixedBackOff{interval=5000, currentAttempts=12, 
maxAttempts=unlimited}. Cause: Broker: broker - Client: client already 
connected from tcp://xxx.xx.xx.xxx:xxxx

有没有一个合适的方法来获得我想要实现的功能?我曾考虑让从属服务器ping主服务器,以协调连接的是哪一个,但我希望实现尽可能简单。

将用户端主题的使用转换为。虚拟主题允许您继续让现有的消息流从该主题生成和使用,但也允许使用者监听特殊命名的队列


一旦您从队列消费,您就可以实现所有消费模式——独占消费模式(允许热备用备份消费模式)、消息组、并行消费模式等。

为什么不转到实现JMS 2.0的ActiveMQ Artemis,这样您就可以共享持久订阅?这将允许两个使用者处理消息并分散负载,而不是让主/从使用者在其中一个使用者大部分时间处于完全空闲状态。由于我们从一个主题中消费,而该主题也被其他系统消费,我相信这将导致这两个使用者处理所有消息。理想情况下,每条消息只能由这两个使用者之一处理。JMS 2.0(ActiveMQ 5.x不支持)添加了共享持久订阅,允许多个客户端连接到同一持久订阅并共享消息。因此,订阅中的每条消息将只发送给一个消费者。值得注意的是,虚拟主题是ActiveMQ专有的,这将影响应用程序的可移植性。@Justin,我不同意它会影响应用程序的可移植性。ActiveMQ的内部配置特定于ActiveMQ,但从客户端应用程序的角度来看,它是通过标准JMS API实现的。这种行为对IBM MQ是100%可移植的,并且很容易用大多数其他JMS代理重新创建。我这里的观点很简单,任何没有编入规范的东西都会受到可移植性问题的影响。据我所知,创建ActiveMQ虚拟主题是为了解决JMS持久订阅的一些缺点。这是(部分)使用客户端的特殊命名约定实现的,这些约定是不可移植的。然而,JMS 2通过可移植的共享订阅解决了这个问题。我并不是说这是一个大问题,但这是值得注意的,尤其是在目前有好的、标准化的替代方案的情况下。