C# 我可以为RabbitMQ使用者设置显式任务超时吗?
我知道,默认情况下,如果检测到使用者/工作者已死亡,带有ack的RabbitMQ将对消息重新排队 如果消费者/工作人员仍然活着,但其流程已停滞太久且没有响应,那么情况如何 我想设置一个明确的时间,表示如果消息已发送给消费者,但消费者在没有ack的情况下保留消息的时间过长,则消息将重新排队 我认识到这可能会导致消息被重复处理,但有时其后果并不像延迟消息传递那样糟糕。C# 我可以为RabbitMQ使用者设置显式任务超时吗?,c#,rabbitmq,C#,Rabbitmq,我知道,默认情况下,如果检测到使用者/工作者已死亡,带有ack的RabbitMQ将对消息重新排队 如果消费者/工作人员仍然活着,但其流程已停滞太久且没有响应,那么情况如何 我想设置一个明确的时间,表示如果消息已发送给消费者,但消费者在没有ack的情况下保留消息的时间过长,则消息将重新排队 我认识到这可能会导致消息被重复处理,但有时其后果并不像延迟消息传递那样糟糕。 如果吞咽了某些内容,任务终止,消息永远不会确认,也永远不会重新排队,也可能发生错误的异常处理。RabbitMQ使用者的超时可以在使用
如果吞咽了某些内容,任务终止,消息永远不会确认,也永远不会重新排队,也可能发生错误的异常处理。RabbitMQ使用者的超时可以在使用者端显式设置。我认为这是很清楚的,但只是提到-在这种情况下,不能有任何自动确认。解决方案是,消费者是多线程的,其中一个线程执行消息处理并仅在消息处理后对其进行确认,另一个线程是超时线程,该线程将:
指示代理放弃它们或重新获取它们
),似乎应该设置一些配置,指示代理如何处理NACK消息现在,所有这些都意味着至少有一部分过程没有停滞。如果整个过程都被卡住了,那么可能代理对消费者的心跳停止了,这就是代理知道消费者死亡的原因(老实说,我没有测试这种情况,所以我假设是这样),但是如果不是这样(或者只是为了更安全),您可以添加某种监视程序来ping消费者如果没有回复,就会杀死它们,这同样会导致消息没有被确认和重新查询