RabbitMQ消息序列保证

RabbitMQ消息序列保证,rabbitmq,Rabbitmq,我有一个项目涉及rabbitmq。我遇到的问题如下: 现在,让我描述一下这个场景。我有n个队列订阅了topic1。 现在我的问题是,如果我按顺序发布3条消息(显示为1、2和3)到名为Exchange的代理中,rabbitmq会保证所有队列中这些消息的顺序吗 我在rabbitmq文档中找到的唯一东西是 AMQP 0-9-1核心规范的第4.7节解释了保证排序的条件:在一个通道中发布的消息,通过一个交换机、一个队列和一个传出通道,将以与发送相同的顺序接收。RabbitMQ自2.7.0版以来提供了更强

我有一个项目涉及rabbitmq。我遇到的问题如下:

现在,让我描述一下这个场景。我有n个队列订阅了
topic1
。 现在我的问题是,如果我按顺序发布3条消息(显示为1、2和3)到名为
Exchange
的代理中,rabbitmq会保证所有队列中这些消息的顺序吗

我在rabbitmq文档中找到的唯一东西是

AMQP 0-9-1核心规范的第4.7节解释了保证排序的条件:在一个通道中发布的消息,通过一个交换机、一个队列和一个传出通道,将以与发送相同的顺序接收。RabbitMQ自2.7.0版以来提供了更强的保证

那么,有谁能帮我指出正确的文档或示例,说明它是否有保证吗


谢谢

您所引用的内容完美地回答了您的问题。唯一的问题是您的消费者设置是什么样子的。如果您将每个队列连接到自己的频道,并且消费者在自己的线程中运行,则该线程将按消息发布的顺序查看每条消息。

如另一张海报所述,假设消费者设置简单/基本,您的场景应该可以正常工作。但这里有一些额外的信息可以解释为什么

我也不确定文档的这一部分包含了哪些细微差别,直到我查到了
频道的确切含义。到RabbitMQ的连接中可以有多个称为
通道的“迷你连接”。每个通道都是独立的,因此您可以通过多个通道向代理发送多条消息

因此,只要场景中的消息是在单个通道上发送的(您必须明确尝试使用多个通道),它们就会以与发送它们相同的顺序到达队列。只要消息是通过单个通道消费的,它们就会以它们在队列中到达的相同顺序(也就是它们发送的相同顺序)到达消费者

发件人:

某些应用程序需要到AMQP代理的多个连接。但是,不希望同时打开多个TCP连接,因为这样做会消耗系统资源,并且使防火墙的配置更加困难。AMQP 0-9-1连接与可被视为“共享单个TCP连接的轻量级连接”的通道进行多路复用


我想你应该知道发布者和消费者是两个不同的服务器。现在,如果我发布这3条消息并将这些消息路由到这些队列,rabbitmq是否保证所有这些队列按顺序接收消息?生产者和消费者通常位于不同的服务器上。您能告诉我您认为您的设置(根据图表和我对消费者的假设)与您引用的规范不同的具体位置吗