首页 > 解决方案 > RabbitMQ 中发布者确认模式和事务有什么区别?

问题描述

我认为发布者确认模式和事务都需要broker确认消息的接收,那么为什么发布者确认模式被视为轻量级操作,具有比事务更好的吞吐量?

我以为事务是同步风格,而发布者确认模式是异步风格,但我错了,有同步风格的发布者确认模式。

那么RabbitMQ中Publisher Confirm模式和事务有什么区别,为什么Publisher Confirm模式能提供更好的吞吐性能呢?

标签: rabbitmqnetwork-programmingqueueamqp

解决方案


发布者确认将在您发布消息时从代理给您一个“是或否”的答案,指示该消息是否已成功排入所有绑定队列(截至发布时)。为代理处理的每条消息发出确认,或者(根据规范),代理可以发出“批量”确认,这表明直到确认指示的所有消息都已处理。我个人不知道经纪人这样做;我认为它只会对每条消息发出一个确认。

使用这种语义,假设您有 10 条消息要发布。代理接受前 9 个,但无法接受第 10 个(可能其中一个队列已满)。其他 9 条消息仍在排队中。

Transactional 让您可以选择发送“全部或全部”。在上述情况下,如果您将所有 10 条消息作为事务的一部分发布,但第 10 条消息失败,您可以中止事务,代理将表现得好像根本没有发布任何消息一样。这种能力是以性能为代价的(根据文档,在事务模式下运行时速度会慢 250 倍)。

事务性确认也是可能的——您可以将多个消息作为单个事务的一部分进行确认。


推荐阅读