RabbitMQ发布者确认订单

时间:2019-01-16 09:29:03

标签: rabbitmq

我正在围绕.NET RabbitMQ库编写包装程序,并且有一个问题,据我所知,该问题在文档中还没有得到解答,我想不出一种通过实验进行验证的方法。所以我想知道是否有人知道答案。

文档here声明以下内容:

  

在大多数情况下,RabbitMQ会在   发布顺序相同(这适用于发布于   单个渠道)。但是,会发出发布者确认   可以异步确认一条消息或一组   消息。发出确认的确切时间取决于   邮件的传递模式(持续还是暂时)以及   邮件路由到的队列的属性(请参见上文)。   也就是说,可以考虑将不同的消息准备就绪   在不同的时间确认。这表示确认   与它们各自的消息相比,它们可以以不同的顺序到达。   在以下情况下,应用程序不应依赖于确认的顺序   可能。

因此,可以不按顺序收到确认,我可以处理。但是,如何使用可以使用的Multiple标志呢?

想象一下以下情况:我发送消息1,2,3,4和5。1失败,2-5成功。代理将Multiple设置为true的1的Nack和5的单个Ack发送给我。如果顺序得到保证,那么我知道我会首先获得Nack,然后我会知道Ack是2-5。但是,如果他们可能不正常,那么我会假设,因为我没有确认1确认Ack是1-5,然后当Nack进来时为时已晚。

是否可以保证这种情况不会发生?

1 个答案:

答案 0 :(得分:1)

这是Alex在评论中提到的Google组中的answer。基本上不会发生这种情况。

嗨,

如果您得到一个1的小数,那么得到5的多数= true,这意味着2-5都成功了。

如果延迟了1个,但没有延迟2-5个,您应该得到4个多重错误假冒,序列2-5个然后为1。

如果ack帧使用范围而不是多标记,那会更好,但是我们在这里。

欢呼 卡尔