在RabbitMQ中,发布者确认模式和事务有什么区别?

cwtwac6a  于 12个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(127)

我认为发布者确认模式和事务都需要代理确认消息的接收,那么为什么发布者确认模式被认为是轻量级操作,比事务有更好的吞吐量呢?
我以为transaction是同步的,publisher confirm是异步的,但是我错了,还有publisher confirm是同步的。
那么RabbitMQ中的发布者确认模式和事务有什么区别,为什么发布者确认模式提供更好的吞吐量性能?

k2fxgqgv

k2fxgqgv1#

当您发布消息时,Publisher confirms将从代理给予您一个“yes or no”的回答,指示消息是否成功地排队到所有绑定队列中(截至发布时)。确认是为代理处理的每个消息发出的,或者(根据规范),代理可以发出一个“批处理”确认,这表明所有消息直到确认所指示的消息都已被处理。* 我个人不知道经纪人这样做;我认为它只是对每条消息发出一个确认。*
使用这种语义,假设您有10条消息要发布。代理接受前9个,但无法接受第10个(可能其中一个队列已满)。其他9条消息仍在排队。
在上面的场景中,如果您发布了所有10条消息作为交易的一部分,但第10条失败,您可以中止交易,代理将表现得好像 * 没有任何消息 * 被发布。这种能力是以性能为代价的(根据文档,在事务模式下操作时,速度慢了250倍)。

  • transmitting ack * 也是可能的-您可以将多个消息作为单个事务的一部分进行 ack

相关问题