apache-camel - 将消息保留在主题中,直到所有消费者完成处理
问题描述
团队,我们有一个发布者向请求主题发布消息,并假设我们有 2 个消费者实例正在运行。这两个实例将从主题获取消息。一个消费者在处理过程中没有任何问题,但另一个消费者在处理过程中崩溃了。由于它是非持久主题,因此在消费者获取消息时,消息已从请求主题中删除。现在我们不希望这种情况发生。除非两个消费者都完成了消息,否则主题中应该可用。我们无法在这种情况下使用持久订阅者,因为消费者实例是动态的。今天我们有 2 个消费者实例,明天根据负载我们可能会再添加 2 个消费者实例,如果我们有持久订阅者,我们将无法维护动态 clientId 和耐用订阅Naem。我们为消费者和发布者使用骆驼路线。
activemq 中的任何方法或选项来处理这个问题?
谢谢金鹰队。
解决方案
问题是这不是主题的工作方式,如果订阅不持久并且客户端在发布时不存在,则不会保留消息。您正在寻找的内容听起来更像是一个队列,因此您可能想要改变您对应用程序正在做什么的想法。
ActiveMQ 有一个称为追溯消费者的功能,它可以在内存中保存一些过去的主题消息,但这并不可靠,因为您的客户端可能出现的时间太晚以至于最旧的消息会从内存中删除,或者您的代理可能已失败并在这种情况下重新启动那些消息不见了。
推荐阅读
- azure-functions - Azure Functions 是否为每个客户端冷启动?
- sql - 抽样组而不是行
- pytorch - 如何在 PyTorch 中将图像 A 转换为具有像素规则的图像 B?
- cassandra - 用 replace_address 标志替换 Cassandra 节点会返回“无法用已引导的节点替换地址”
- reactjs - 我收到“错误:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件)”
- http - Python http服务器在本地工作,但来自另一台机器的连接被拒绝
- javascript - 使用javascript从服务器路径目录中获取文件名
- javascript - 更新所有机器人命令而不重新加载它(没有“node.”或nodemon)
- c# - 无法使用 IP 编辑访问数据库,但可以通过 localhost 工作
- python - Pyspark - 从日期和小时列创建时间戳