【问题标题】:I'ts possible to route messages from a queue to an exchange on rabbitmq?我无法将消息从队列路由到rabbitmq 上的交换器?
【发布时间】:2014-03-29 12:14:13
【问题描述】:

恐怕反应是一个很大的否定,但我会公开我尝试实施的场景。也许有人看到了更好的方法。

我们有一个扇出交换,代表 N 个用户之间的对话 (conv1) 我们有两个exchange,名为user1,user2,绑定到conv1,其中conv1是源, 此用户交换中的每一个都绑定到 conv1,以 conv1 作为目标,路由密钥为 conv1

如果我们通过带有路由键“conv1”的交换机 user1 发送消息,则消息会到达连接到 user1 和 user2 交换机的所有消费者。

一个用户应该能够让多个消费者收听他的交流

我需要做的是,当没有消费者附加到用户交换时,这些消息可以排队,并在连接时通过用户交换接收。我的第一个想法是在用户交换和对话交换之间放置一个队列,所以流程如下:

consumer-user1 --> tempqueue --> user1 --> conv1 --> queueuser2 --> user2 --> consumer-user2

但似乎不可能使绑定 queueuser2 --> user2 在那个方向上。

如果我让消费者​​直接收听这个 queueuserN,通过将它们绑定到 conv1 而不是绑定用户交换:

consumer-user1 --> tempqueue --> user1 --> conv1 --> queueuser2 --> consumer-user2

然后(显然)该消息仅到达 N 个可能连接的消费者之一。

有什么方法可以做到这一点?似乎铲子插件可以做到这一点,但是在经纪人之间......

【问题讨论】:

  • 我认为你可以简化你的架构,无论如何shovel也可以在同一个broker上工作,在你的shovel-config文件中配置相同的IP地址就足够了。

标签: queue rabbitmq


【解决方案1】:

您可以使用alternate exchange RabbitMQ extension:它的目的正是重新路由无法发送到任何队列的消息,否则会丢失。

【讨论】:

  • 谢谢您的回复。我也有同样的问题。 AE 是很好的解决方案。我可以捕捉到 AE 的消息,为他们创建新队列。常规键。因此,来自该聊天的所有新消息都将进入主交换中的正确队列。但是,如果来自同一聊天的超过 1 条消息发送到 AE,该怎么办?我怎样才能以正确的顺序处理它们?有什么方法可以将它们放回主队​​列并保留新到达消息的顺序?
  • 链接已损坏 404
猜你喜欢
  • 2012-12-17
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2016-08-13
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多