RabbitMQ中的发布者确认模式和事务之间有什么区别?

RabbitMQ中的发布者确认模式和事务之间有什么区别?,rabbitmq,network-programming,queue,amqp,Rabbitmq,Network Programming,Queue,Amqp,我认为publisher-confirm模式和事务都需要代理确认消息的接收,那么为什么publisher-confirm模式被认为是轻量级操作,它比事务具有更好的吞吐量 我以为事务是同步样式,而发布者确认模式是异步样式,但我错了,发布者确认模式是同步样式 那么,发布服务器确认模式和RabbitMQ中的事务之间有什么区别,以及为什么发布服务器确认模式提供更好的吞吐量性能?使用发布服务器确认 我们最近添加了Java和.NET教程,以正确使用异步发布服务器- 注意:RabbitMQ团队监视Rabbi

我认为publisher-confirm模式和事务都需要代理确认消息的接收,那么为什么publisher-confirm模式被认为是轻量级操作,它比事务具有更好的吞吐量

我以为事务是同步样式,而发布者确认模式是异步样式,但我错了,发布者确认模式是同步样式


那么,发布服务器确认模式和RabbitMQ中的事务之间有什么区别,以及为什么发布服务器确认模式提供更好的吞吐量性能?

使用发布服务器确认

我们最近添加了Java和.NET教程,以正确使用异步发布服务器-



注意:RabbitMQ团队监视
RabbitMQ用户,并且只在某些时候回答有关StackOverflow的问题。

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

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

Transactional为您提供了发送“全部或不发送”的选项。在上面的场景中,如果您将所有10条消息作为事务的一部分发布,但第10条消息失败,则您可以中止该事务,并且代理将表现为根本没有发布任何消息。此功能是以性能为代价的(在事务模式下运行时,速度最多慢250倍)


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

我想问一下发布者确认和事务之间的区别,以及为什么事务的吞吐量较低。这可以归结为RabbitMQ源代码中的实现。我对实现的理解不够透彻,无法在这里简单解释。