如果我使用确认(model.ConfirmSelect)AKA basic.ack 和强制标志发布。如果消息未传递,我是否总是在 basic.ack 事件之前获得 basic.return 事件。
我想将所有 basic.return 消息添加到 ConcurrentDictionary 并在发布后检查消息是否在字典中我会抛出异常,即不存在队列/路由,并在错误或成功时将其删除。
如果我使用确认(model.ConfirmSelect)AKA basic.ack 和强制标志发布。如果消息未传递,我是否总是在 basic.ack 事件之前获得 basic.return 事件。
我想将所有 basic.return 消息添加到 ConcurrentDictionary 并在发布后检查消息是否在字典中我会抛出异常,即不存在队列/路由,并在错误或成功时将其删除。
是的,您将始终按该顺序接收事件。
从文档:
什么时候确认消息?
对于不可路由的消息,一旦交换验证消息不会路由到任何队列(返回队列的空列表),代理将发出确认。如果消息也是强制发布的,则 basic.return 在 basic.ack 之前发送给客户端。否定确认 (basic.nack) 也是如此。