【发布时间】: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地址就足够了。