rabbitmq - RabbitMQ 发布者确认订单
问题描述
我正在围绕.NET RabbitMQ 库编写一个包装器,并且据我所知,文档中没有回答一个问题,我想不出一种方法来通过实验验证它。
这里的文档说明了以下内容:
在大多数情况下,RabbitMQ 将按照发布的顺序向发布者确认消息(这适用于在单个通道上发布的消息)。但是,发布者确认是异步发出的,可以确认单个消息或一组消息。发出确认的确切时间取决于消息的传递模式(持久与瞬态)以及消息路由到的队列的属性(见上文)。也就是说,不同的消息可以被认为在不同的时间准备好确认。这意味着与它们各自的消息相比,确认可以以不同的顺序到达。如果可能,应用程序不应依赖于确认的顺序。
因此,可以无序地收到确认,我可以应付。但是,这如何与Multiple
可以使用的标志一起使用?
想象以下场景:我发送消息 1、2、3、4 和 5。1 失败,2-5 成功。经纪人向我发送了一个 1 的 Nack 和一个 5 的单个 Ack,并Multiple
设置为 true。如果订单得到保证,那么我知道我会先得到 1 的 Nack,然后我会知道 Ack 是 2-5。但是,如果它们可能出现故障,那么我会假设,因为我没有确认 1,Ack 是 1-5,然后当 Nack 进来时,为时已晚。
是否有保证不会发生这种情况?
解决方案
这是Alex 在评论中提到的 Google Group的答案。基本上,这种情况是不会发生的。
你好,
如果你得到一个 1 的单个 nack,那么一个 5 的 ack,multiple=true 这意味着 2-5 都成功了。
如果 1 延迟但 2-5 没有延迟,则您应该得到 4 个 multiple=false ack,序列为 2-5 ,然后是 1 的 nack。
如果 ack 帧使用范围而不是多个标志会更好,但我们现在是这样。
卡尔干杯
推荐阅读
- maven - 马文
标记奇怪的行为 - javascript - 在带有十字符号的文本框中搜索结果
- css - CSS 内联工作,但不是来自样式表
- javascript - D3.JS 中的可折叠图:多个根点
- unit-testing - vue.js unit:test w test-utils 和 Jest:我如何在方法中测试 - window.open()?
- sql-server - 如何在 SQL 中将五个表与另一个依赖项连接起来
- css - width vs. flex-basis: [width] - 元素被扩展了?
- marketo - 如何通过 API 在 Marketo 中的列表中添加潜在客户(电子邮件、姓名)
- google-cloud-storage - Google Cloud CDN 忽略超过 3600 的 max-age
- android - WebView 不显示结果