首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ发行者确认订单

RabbitMQ发行者确认订单
EN

Stack Overflow用户
提问于 2019-01-16 09:29:03
回答 1查看 388关注 0票数 1

我正在为.NET RabbitMQ库编写一个包装器,在我所能看到的文档中有一个问题没有得到回答,而且我也想不出一种实验验证它的方法。

这里的文件声明如下:

在大多数情况下,RabbitMQ将以相同的发布顺序向发布者确认消息(这适用于在单个通道上发布的消息)。但是,发布服务器确认是异步发出的,可以确认单个消息或一组消息。发出确认消息的确切时刻取决于消息的传递模式(持久性还是暂时性的),以及消息被路由到的队列的属性(参见上文)。也就是说,不同的消息在不同的时间可以被认为是可以确认的。这意味着,与各自的消息相比,确认可以以不同的顺序到达。在可能的情况下,应用程序不应依赖于确认的顺序。

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

假设以下场景:我发送消息1、2、3、4和5.1失败,2-5成功。代理为1向我发送一个Nack,为5发送一个Ack,Multiple设置为true。如果订单得到保证,那么我知道我会先得到1的黑牌,然后我就会知道Ack是2-5的。然而,如果他们可能出了问题,那么我会假设,因为我没有确认1,Ack是1-5,然后当黑进来时,将是太晚了。

在某些地方,这种情况是不可能发生的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-17 08:45:41

这就是答案来自Google 亚历克斯在评论中提到。基本上,这种情况是不可能发生的。

嗨, 如果你用1得到一个nack,然后用multiple=true得到一个ack 5,这意味着2-5都是成功的。 如果1是延迟的,但2-5不是,那么你应该得到序列2-5的4个multiple=false nack,然后是1的nack。 如果ack帧使用范围而不是多个标志,这会更好,但我们在我们的位置。 干杯 卡尔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54213939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档