如何解决Rabbitmq:在MQTT中收听
在这里,我将解释我想要的用例:
- 我在设备连接到代理之前为mqtt客户端( mqtt-subscription-client1qos1 )创建了持久队列。交流( amp.topic )
- 我为该队列( topic1 , topic2 )创建了一些绑定
- 我发送了1条消息到 topic1 (使用amqp)
- 我通过amqp向 topic2 发送了1条消息
- 然后使用MQTT客户端设置client =“ client1 ”,我使用相同的交换器( amp.topic )连接到“ topic1 ”
我想收到多少条消息?我期望1,但是我得到2,我不确定我是否测试正确,或者这是否是预期的行为。
非常感谢您的帮助
解决方法
在RabbitMQ设计的AMQP中,消息始终发布到交换,根据路由键和绑定进行路由,并从队列。
在MQTT中,消息将发布到经纪人,根据主题进行路由,并通过订阅进行使用。
RabbitMQ MQTT plugin将这些概念映射在一起:
- MQTT 经纪人是由单个交易所 模拟
- MQTT 主题用作路由键
- MQTT 订阅是从该交换到队列的绑定
- 最后,每个MQTT 客户端都有一个队列,可以从中接收其订阅的消息
这里的关键是,这些只是普通的RabbitMQ交换和队列,用于模拟MQTT模型-消息可以由代理路由到任何队列,而来自其他代理的消息可以路由到队列,它们不需要与您在MQTT中定义的主题相关。
因此,如果您手动将消息路由到特定MQTT客户端的队列中,RabbitMQ会将其与该队列中的其他消息一起传递到客户端。订阅客户端的“主题”没有任何区别,因为这仅用于在服务器上设置绑定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。