首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以为RabbitMQ使用者设置一个明确的任务超时吗?

我可以为RabbitMQ使用者设置一个明确的任务超时吗?
EN

Stack Overflow用户
提问于 2016-04-21 23:27:51
回答 1查看 1.2K关注 0票数 3

我了解到,默认情况下,带有ack的RabbitMQ将在检测到使用者/工作人员已经死亡的情况下重新排队。

消费者/工人还活着的情况如何,但它的过程已经停顿了太长时间,而且没有被破坏?

我想设置一个明确的时间,说明如果消息已经被发送给一个消费者,但是该使用者在没有ack的情况下保存消息的时间太长,消息就会重新排队。

我认识到,这可能导致消息被一式两次处理,但有时结果并不像延迟消息传递那样糟糕。在错误的异常处理中也会发生,如果某些东西被吞没,任务终止,消息永远不会被破坏,也不会重新排队。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-22 05:54:28

可以在使用者端显式地设置RabbitMQ使用者的超时。我认为这是很清楚的,但我只想提一下--在这种情况下,绝不能有任何自动ACK。解决方案是,使用者是多线程的,其中一个线程执行消息处理,并且只有在消息被处理后才对消息进行ACKing,而另一个线程是一个超时线程,它将:

  1. 超时过期后终止到代理的连接,因此将请求消息。
  2. 对接收到的消息进行包装并重新发布(显式)
  3. 输入接收到的消息,但是根据文件 (instructing the broker to either discard them or requeue them),似乎应该设置一些配置,指示代理应该如何处理NACKed消息

现在,所有这些都意味着至少有一部分过程没有被卡住。如果整个过程被卡住了,也许经纪人对消费者的心跳就停止了,这就是经纪人知道消费者死亡的原因(老实说,我没有测试这种情况,所以我假设是这样的),但是如果不是这种情况(或者仅仅是为了安全起见),您可以添加某种监视狗进程,如果没有回复,就会敲击消费者并杀死他们,这将再次导致消息不是ACKed并被请求。

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

https://stackoverflow.com/questions/36782162

复制
相关文章

相似问题

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