当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ - 改变交换的结合

马承
2023-03-14

我使用RabbitMq 3.7.16,我有一个交换,我想绑定到两个可能的队列之一。

我的用例是将交换绑定到第一个队列,并将其切换到第二个队列,然后再将绑定切换回来。

我当前的实现

交换属于直接类型,两者的路由关键字都是“”。

切换绑定时,我执行绑定(第二个队列),然后解除绑定(第一个队列)。当切换回来时,我会做相反的事情。

问题所在

我有几毫秒的时间,两个队列都绑定到交换,因此接收相同的消息。我希望每条消息都准确地到达一个可能的队列。

用RabbitMQ做这件事的正确方法是什么?

共有1个答案

梁渊
2023-03-14

我的解决方案

有两个交换,一个绑定到第一队列,另一个绑定到第二队列。我为first-exchange定义了“alternate-exchange”属性,它将转发任何无法路由到second-exchange的消息。

当我希望消息到达第二个队列时,我只需从第一个交换中取消绑定第一个队列。这使得消息在交换中不可路由,从而转发到第二次交换。当我希望消息再次到达第一个队列时,我会将其绑定回去。

 类似资料:
  • 我正在尝试编写一个应用程序,测试将N个交换绑定到内存、IO等相同队列的效果。 所有测试都使用“主题”交换类型。我遇到的问题是,当我使用多个exchange进行测试时,我没有收到我发布回的所有消息。但是,当我使用1 exchange时,我会收到所有消息。 你知道为什么会这样吗? 谢谢 编辑: 我有一个队列,它使用相同的绑定键绑定到两个“主题”交换: *。系统日志# #。系统错误 我将向每个excha

  • 我一直在尝试使用RabbitMQ,但遇到了以下问题(与此非常类似:RabbitMQ中的主题交换与直接交换)。 我需要密集地广播大约800种类型的消息(因此每种消息类型都会有很多消费者),我想知道以下哪种方法更好: > 创建一个直接交换,在该交换中,消息将使用路由密钥(消息类型名称)发送,每个消费者都将通过绑定了相应路由密钥的临时队列连接到该交换。(因为没有像“key1.key2.*”这样复杂的路由

  • 我正在尝试使用声明列表为RabbitMQ配置铲子插件。我已将远程exchange配置为在创建时具有备用exchange。 我的问题是,我无法让slot的配置文件包含这个参数,所以RabbitMQ在启动时崩溃。 这是我的配置的样子: 问题出在名为my-exchange-topic的目的交换上。如果我去掉声明部分,那么配置文件就工作了。 这是错误: =INFO REPORT==== 31-Jul-20

  • 我有一个场景,我需要执行一系列流程,每个步骤都在独立的应用程序中完成和扩展。我正在为所有交换使用主题交换。当前拓扑如下所示: P- 我们正在“版本化”队列,以处理可能影响消息结构的需求更改。绑定可能如下所示: 步骤1。exchange绑定到步骤1。v1。使用绑定键step1排队。v1 步骤1。exchange绑定到步骤1。v2。使用绑定键step1排队。v2级 还有其他与版本无关的绑定模式也使局部

  • 我有一些问题,试图了解类型标头的交换是如何工作的。 只有一个交换,myExchange 三个队列: myQueue1 myQueue2 myQueue3 绑定: < li >我的兑换= 我希望消息的标题具有多个值;test1、test2、test3 的任意组合(例如:单独 test1、test1 和 test2、test3 和 test2 等) myQueue3只接收具有MyHeader的消息:[

  • 我有点迷茫,正在尝试实施话题交流,不确定需要什么。 我想有几个路由键和一个主题交换(默认的amq.topic)。我的钥匙是: 创建customer.app 创建customer.app 客户。*.创建 我希望我的队列是持久的,但是我需要1个“客户”队列还是2个appA和appB队列?我已经弄清楚了我的发布者;连接、交换声明、基本发布。 但我正在与消费者斗争。假设我想打开3个控制台,上面提到的每个路