将消息保持在主题中,直到所有使用者完成处理

时间:2018-12-07 08:12:14

标签: apache-camel activemq activemq-artemis

团队, 我们有一个发布者,它发布消息以请求主题,并假设我们有2个使用者实例正在运行。这两个实例将从主题中获取消息。一个消费者处理完所有问题,而其他消费者则在中间崩溃。由于它是非持久性主题,因此在消费者获取消息时,消息已从请求主题中删除。现在我们不希望这种情况发生。除非两个使用者都已完成,否则应该在主题中提供消息。 由于消费者实例是动态的,因此我们无法在这种情况下使用持久订户。今天我们有2个使用者实例,明天基于负载,我们可能会再增加2个使用者实例,如果我们有持久性订户,我们将无法维护动态clientId和持久性SubscriptionNaem。 我们为消费者和发布商使用骆驼路线。

activemq中有任何方法或选项可以解决此问题吗?

谢谢, 金鹰队。

1 个答案:

答案 0 :(得分:0)

问题在于,这不是主题的工作方式,如果订阅不是持久的,并且发布时客户端不存在,则消息不会保留。您正在寻找的内容听起来更像是一个队列,因此您可能想要改变对应用程序正在做什么的想法。

ActiveMQ具有称为追溯使用者的功能,该功能可以将一些过去的主题消息保存在内存中,但是这不可靠,因为您的客户端可能出现得太晚,导致最旧的消息从内存中删除,否则您的代理可能会失败并重新启动在这种情况下,这些消息就消失了。