【问题标题】:RabbitMq bindingsRabbitMq 绑定
【发布时间】:2016-06-15 19:48:03
【问题描述】:

我意识到我可能做错了 - 但这是你纠正我的机会!

我有一个设备 - id 为... 60。 设备 60 由 Master 2 处理。

我从设备收到一条消息,消息头中是它的 ID。但是在这个阶段,我的程序不知道,也不关心设备分配给了哪个主机。

我想将设备 60 的所有消息放入一个名为“Device60”的 RabbitMq 队列中。此时,可能没有任何东西在监听该队列。这就是为什么我不能使用交换 b/c 如果没有人在听,那么消息就会被丢弃。我需要将消息保留在 Queue60 中,直到它们被处理。

当 Master 2 上线时,它会列出一个包含 600 个设备的列表,它将为其处理。所以它在那个时候可以创建绑定。

如何进行队列到队列绑定以将“Device60”中的消息分发到“Master2”队列?

如果我处理这一切都错了,请帮助我理解基于 RabbitMq 的 AMQP 实现的“正确”方式

要求是任何设备都可以发送消息,并且它们将按顺序保存,直到有东西上线并将它们拉入。

【问题讨论】:

    标签: rabbitmq amqp


    【解决方案1】:

    您可以通过创建一个交换器和一个绑定到交换器的名为Device60 的队列来使用路由键。

    channel.queueBind("Device60","myexchange","device.60")
    

    此时您可以使用路由键发布消息。 例如:

     channel.basicPublish("myexchange","device.60",mymessage);
    

    现在Device60 将接收消息并存储它们,直到消费者在线。

    对于其他设备也是一样的:

    channel.queueBind("Device50","myexchange","device.50")
    

    channel.basicPublish("myexchange","device.50",mymessage);
    

    希望对你有帮助。

    【讨论】:

    • 谢谢。我的消费者将上线并建立一个队列“Master.2” - 然后它如何接收它负责的任何设备的消息?抱歉,如果我的问题不清楚。所以它将device60交换绑定到Master.2队列,但是Device60队列中预先存在的消息呢?
    • 您可以创建另一个队列并使用路由键#绑定它。作为channel.queueBind("Master.2","myexchange","device.#") 。希望我明白你的意思:)!
    • 然后会路由所有现有消息?我的理解是它只会路由新消息。
    • 是的,你是对的。另一种方法是使用铲子插件,通过绑定规则跨队列复制消息。
    • 所以我执行 queueBind - 然后我执行铲子 - 现在假设消息在我执行铲子时仍在流入,消息的顺序是什么?我是否需要采取额外的步骤来确保按正确的顺序获得它们? - 非常感谢您提供的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2012-08-23
    相关资源
    最近更新 更多