首页 > 解决方案 > 将消息保留在主题中,直到所有消费者完成处理

问题描述

团队,我们有一个发布者向请求主题发布消息,并假设我们有 2 个消费者实例正在运行。这两个实例将从主题获取消息。一个消费者在处理过程中没有任何问题,但另一个消费者在处理过程中崩溃了。由于它是非持久主题,因此在消费者获取消息时,消息已从请求主题中删除。现在我们不希望这种情况发生。除非两个消费者都完成了消息,否则主题中应该可用。我们无法在这种情况下使用持久订阅者,因为消费者实例是动态的。今天我们有 2 个消费者实例,明天根据负载我们可能会再添加 2 个消费者实例,如果我们有持久订阅者,我们将无法维护动态 clientId 和耐用订阅Naem。我们为消费者和发布者使用骆驼路线。

activemq 中的任何方法或选项来处理这个问题?

谢谢金鹰队。

标签: apache-camelactivemqactivemq-artemis

解决方案


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

ActiveMQ 有一个称为追溯消费者的功能,它可以在内存中保存一些过去的主题消息,但这并不可靠,因为您的客户端可能出现的时间太晚以至于最旧的消息会从内存中删除,或者您的代理可能已失败并在这种情况下重新启动那些消息不见了。


推荐阅读