RabbitMQ发布服务器如何工作?

RabbitMQ发布服务器如何工作?,rabbitmq,spring-rabbit,Rabbitmq,Spring Rabbit,我查阅了rabbitmq文档, 使用标准AMQP 0-9-1,确保消息 使用事务不会丢失—使通道具有事务性 然后,对于每条消息或一组消息发布,提交。在这个 在这种情况下,交易是不必要的重量级和减少 吞吐量提高了250倍。要纠正这一点,请确认 介绍了其作用机理。它模仿消费者的确认 机制已存在于协议中 要启用确认,客户端将发送confirm.select方法。 根据是否未设置等待,代理可能会响应 使用确认键。选择-ok。一旦将confirm.select方法用于 通道,据说处于确认模式。事务通道

我查阅了rabbitmq文档,

使用标准AMQP 0-9-1,确保消息 使用事务不会丢失—使通道具有事务性 然后,对于每条消息或一组消息发布,提交。在这个 在这种情况下,交易是不必要的重量级和减少 吞吐量提高了250倍。要纠正这一点,请确认 介绍了其作用机理。它模仿消费者的确认 机制已存在于协议中

要启用确认,客户端将发送confirm.select方法。 根据是否未设置等待,代理可能会响应 使用确认键。选择-ok。一旦将confirm.select方法用于 通道,据说处于确认模式。事务通道 无法进入确认模式,一旦通道处于确认模式, 它不能成为事务性的

目前我正在使用SpringRabbit库的RabbitTemplate.convertAndSend发送消息。 我正在使用事务通道将消息发布到rabbitmq,根据文档,它的速度较慢,我可以通过使用publisher confirm提高吞吐量

但我不太清楚

若我想启用确认,那个么需要哪些更改,以及如何处理异常? 我的再审机制是什么? 此发布服务器是否确认以异步方式工作? 事务是否同步工作


非常感谢您的建议。

如果您等待每次发送的确认,则使用publisher confirms不会显著提高事务的性能。如果您发送了许多消息并等待稍后的确认,它们将非常有帮助

事务是同步的。确认是完全异步的

当您启用确认时,您将向模板提供一个回调,在收到确认时将调用该回调。您可以将相关数据添加到发送中,该数据在回调中提供,以便您可以确定此确认用于哪个发送。此外,最新版本中的相关数据提供了一个未来,您可以等待它以同步方式接收确认

这是处理任何异常的地方

我希望这有帮助

中有一个确认并返回示例Spring引导应用程序,但它是在将future添加到CorrelationData之前创建的。那个


相关数据可以包含原始消息,允许重试。

谢谢Gary,您已经消除了我的疑虑。对于我来说,稍后的确认是可以的,相关数据将用于重新发送。但它是否会维持订购,比如说m5未能在RMQ中发布,而m6、m7成功发布,因此任何收听RMQ的消费者都将失去订购。请纠正我。或者我需要捕获异常并从m5重新开始,通过重复后面的成功消息m6、m7继续发布到RMQ。。。通过维护缓冲区中的所有消息,直到我得到确认为止,如果我错了,请纠正我?最后,如果我的RMQ消费者系统依赖于订购,是否有方法使用publisher confirm将消息发布到RMQ?没有订购保证;最有可能的是,如果m5失败,m6和m7也会失败,但肯定有可能m6和m7会成功。如果需要订购,那么我认为交易是唯一的选择。此外,为了确保排序,您应该在template.invoke操作的范围内执行所有发送,除非只有一个线程发送消息。看见