在主题中保留消息,直到所有消费者完成处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在主题中保留消息,直到所有消费者完成处理相关的知识,希望对你有一定的参考价值。

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

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

谢谢,金鹰队。

答案

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

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

以上是关于在主题中保留消息,直到所有消费者完成处理的主要内容,如果未能解决你的问题,请参考以下文章

由于消费者速度较慢,Kafka 重新平衡主题中的数据

卡夫卡消费者:受控阅读主题

消息未保留在 Apollo 服务器中

消息队列如何利用标签实现消息过滤

如何通知kafka的制片人?

JMS 工作流 - 混合队列和主题