Publisher Confirms上的 RabbitMQ 博客文章说
如果发布者和代理之间的连接因未完成的确认而断开,这并不一定意味着消息丢失,因此重新发布可能会导致重复消息。
这意味着IModel.WaitForConfirmsOrDie()
当与代理的连接在等待 时断开时,将引发异常(就像确认的快速测试一样)Ack
,但消息可能仍会被传递。有没有办法通过查看异常来区分是否
- 消息肯定没有送达
- 消息可能已送达
换句话说,有没有办法明确区分所有(可能的)Nack
s(=未传递)与其他错误,如连接断开(在代理接受消息之后)?
API 文档只说
如果收到 nack,立即抛出 OperationInterruptedException 异常
在我的“断开连接”测试中,也抛出了一个(源自)OperationInterruptedException 的异常,因此这似乎排除了仅查看异常类型的可能性。