首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取RabbitMQ未确认消息/ RabbitMQ循环

如何读取RabbitMQ未确认消息/ RabbitMQ循环
EN

Stack Overflow用户
提问于 2014-11-11 05:03:15
回答 1查看 7.4K关注 0票数 3

我希望在一个messageId队列中读取未确认消息的有效负载或RabbitMQ。这个是可能的吗?

我想这么做的原因是我试图使用RabbitMQ死信特性定期为自动生成消息构建一个循环。简单地说,创建两个队列--工作队列和延迟队列。

  1. 将延迟队列中消息的TTL设置为所需的时频周期性。可以有不同的TTL消息,用于不同的工作目的;
  2. 将一条消息放入延迟队列。当消息过期时,它将重新发布到工作队列中。只要需要,消息就可以放在工作队列中,直到使用者使用它为止。
  3. 一个消费者接收到消息,并对其进行处理。如果处理成功,使用者需要确认工作队列,然后将消息写回延迟队列;如果处理失败(例如,线程崩溃),则不确认。然后,消息将自动重新出现在工作队列中。然后,另一位消费者可以接手这份工作。当发送回延迟队列的消息再次过期时,它将被重新发布,然后由消费者重新使用.一个被构造的循环,工作负载分布。

我希望确保循环中没有丢失或重复消息,因为我不希望同时丢失作业或双倍执行任务。然而,复制消息的可能性很小。下面显示使用者首先将消息写回延迟队列,并确认工作队列。如果线程在两行以下崩溃,消息将出现在延迟队列中,而兔子将再次将消息重新发布到工作队列中。最后在循环中出现重复的消息。

代码语言:javascript
复制
  channel.basicPublish(DELAY_EXCHANGE, "", null, message.getBytes());
  channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

为了防止出现上述情况,我想在以上两行之后添加一个观察狗的逻辑:

  1. 检查循环中的消息总数(两个队列中的总消息),以确定它是否等于我的预期数量(我预期的数目减去10);
  2. 如果这个数字不匹配,我想知道哪一个丢失了或者哪个是重复的,然后处理它。我不关心这些信息的顺序,或者频率受到干扰,因为这确实是一个需要考虑的边缘情况。我可以很容易地检索那些已经准备好的消息并请求它们。但问题是如何处理那些未被确认的信息?

非常感谢您提前!

罗伊

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 09:03:49

不可能从其他上下文中读取未确认的消息--原始消息被消耗,并且保存为非身份消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26857845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档