我正在围绕.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进来时为时已晚。
是否可以保证这种情况不会发生?
答案 0 :(得分:1)
这是Alex在评论中提到的Google组中的answer。基本上不会发生这种情况。
嗨,
如果您得到一个1的小数,那么得到5的多数= true,这意味着2-5都成功了。
如果延迟了1个,但没有延迟2-5个,您应该得到4个多重错误假冒,序列2-5个然后为1。
如果ack帧使用范围而不是多标记,那会更好,但是我们在这里。
欢呼 卡尔