【问题标题】:What is the difference between Publisher Confirm mode and transaction in RabbitMQ?RabbitMQ 中发布者确认模式和事务有什么区别?
【发布时间】:2019-10-07 11:49:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: rabbitmq network-programming queue amqp


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用发布者确认。

      我们最近添加了正确使用异步发布者确认的 Java 和 .NET 教程 - https://www.rabbitmq.com/tutorials/tutorial-seven-java.html


      注意:RabbitMQ 团队会监控 rabbitmq-users mailing list 并且有时只回答 StackOverflow 上的问题。

      【讨论】:

      • 我在问发布者确认和交易之间的区别以及为什么交易的吞吐量较低。
      • 归结为 RabbitMQ 源代码中的实现。我对实现的理解不够好,无法在此简明扼要地解释一下。
      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 2020-03-13
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多