有没有一种方法可以使用RabbitMQ以100%的交付保证传输数据?

有没有一种方法可以使用RabbitMQ以100%的交付保证传输数据?,rabbitmq,eventual-consistency,reliable-message-delivery,Rabbitmq,Eventual Consistency,Reliable Message Delivery,我正在构建一个系统,其中我希望使用RabbitMQ作为主要的消息传递机制 我的系统需要非常强大的消息传递保证,例如,消息必须到达目的地并得到确认, 否则,我希望他们会被重新提问,并重新发布 用例是保持两个系统之间的最终一致性 我还希望避免管理应用程序中消息的任何状态。 我知道发布持久化消息并不能100%保证它被持久化到磁盘,因为并不是每个消息都调用fsync(2) 因此,我的问题是-我可以使用RabbitMQ作为100%可靠的*消息传递机制吗? 我已经阅读了有关事务的内容,但除了没有明确说明对每

我正在构建一个系统,其中我希望使用RabbitMQ作为主要的消息传递机制

我的系统需要非常强大的消息传递保证,例如,消息必须到达目的地并得到确认, 否则,我希望他们会被重新提问,并重新发布

用例是保持两个系统之间的最终一致性

我还希望避免管理应用程序中消息的任何状态。

我知道发布持久化消息并不能100%保证它被持久化到磁盘,因为并不是每个消息都调用fsync(2)

因此,我的问题是-我可以使用RabbitMQ作为100%可靠的*消息传递机制吗?

我已经阅读了有关事务的内容,但除了没有明确说明对每条消息都执行
fsync(2)
或者如果没有成功,则会发生(同步)故障之外,找不到任何其他内容

*我所说的可靠是指信息最终应该被传递,永远。重复的消息是可以接受的

我可以使用RabbitMQ作为100%可靠的消息传递机制吗

是的,使用持久消息、发布者确认和消费者确认-

当您的发布者收到确认时,消息已写入并同步到磁盘



注意:RabbitMQ团队监视并有时只回答有关StackOverflow的问题。

我认为这对于StackOverflow来说太广泛了。此处的文档将向您推荐邮件列表。我个人的意见是肯定的,RabbitMQ为您提供了可靠的交付,但其他人可能会认为x、y或z故障条件是不可接受的。感谢您的评论,@Horba,但我觉得这个问题确实值得回答,而且不太宽泛。我不是说一般的可靠性,而是描述一种可能出现传递失败的特定情况,并请求针对这种特定情况的解决方案。我简单地阅读了有关publisher confirms的内容,但不理解它们比持久队列上的持久消息提供了更强的保证。这涵盖了我关心的大部分问题,除了管理应用程序中的状态。无论如何,我想你不可能拥有全部。谢谢Publisher确认消息和持久消息是两个不同的东西。您可以使用publisher confirms发送非持久性消息,反之亦然。两者的结合使用才是最可靠的。是的,你可以全部拥有。是的,我很清楚。尽管如此,我仍然必须管理失败消息的状态——因此,从技术上讲,我不能“拥有全部”。