我是JMS和ESB的新手。 我使用activemq作为JMS和mule作为ESB。当我使用jms连接器参数“persistentDelivery”将消息从一个队列转发到另一个队列时,它将在activemq重新启动后将消息保留在目标队列中。但是,如果将消息从一个主题转发到另一个主题,则重新启动后消息不会保留在目标主题中。
对于activemq中的主题,是否存在消息持久性的限制?
提前致谢。
此致 Arijit
答案 0 :(得分:7)
主题的不同之处在于,只有持久消费者才会保留消息。
了解更多信息......
http://activemq.apache.org/how-do-durable-queues-and-topics-work.html
http://stefanlearninglog.blogspot.com/2009/07/persistent-jms-topics-using-activemq.html
答案 1 :(得分:0)
Activemq 中的主题不是持久和持久的,因此万一您的消费者之一宕机。你会丢失你的消息。
为了使主题持久和持久,您可以通过为每个消费者创建唯一的客户端 ID 来创建持久消费者。
但同样,如果您遵循微服务架构,这不是分布式的。因此,多个 Pod 或副本会在消费消息时产生问题,因为持久消费者不可能实现负载平衡。
为了缓解这种情况,Activemq 中有一个虚拟主题选项。下面提供了更多详细信息,
您可以通过您的制作人在名为 VirtualTopic.MyTopic 的主题中发送您的消息。 ** 注意:对于默认的 activemq 配置,您必须遵循此命名约定。但是是的,还有一种方法可以覆盖此命名约定。
现在,要通过多个消费者使用您的消息,您还必须为消费者端目的地设置命名约定,例如。 Consumer.A.VirtualTopic.MyTopic Consumer.B.VirtualTopic.MyTopic 这两个消费者将通过上面创建的主题接收消息,并在同一消费者的多个副本之间启用负载平衡。
我希望这能帮助您解决有关 activemq 主题的问题。