【问题标题】:Route publish message between two MQTT broker在两个 MQTT 代理之间路由发布消息
【发布时间】:2020-09-29 16:29:08
【问题描述】:

如下图所示,我在两个代理之间路由发布消息时遇到了一个令人头疼的问题。

如何在没有主题订阅信息的情况下向用户 B 发送消息?

我的意思是:

第 1 步:我将代理 A 配置为与代理 B 的桥接代理

第 2 步:用户 A 向代理 A 发布主题 # 的消息。这意味着代理 B 将收到消息,用户 A 和用户 C 都会收到此消息。

如果我只希望用户 C 接收消息,在第 2 步中,我必须在用户 B 正在订阅的主题上发布消息。例如:

用户 A 在 Broker 1 上发布主题 /home/userB 的消息,用户 B 在 Broker 2 上订阅主题 /home/userB

这是我的麻烦,实际上,代理 1 代表组织 1,代理 2 代表组织 2。

组织 1 下的用户 A 无法获得用户 B(组织 2 下)订阅的主题的信息。

请帮帮我。

提前谢谢你。

【问题讨论】:

  • 在 Internet 上搜索“mosquitto 访问控制列表”或阅读 mosquitto 文档。

标签: mqtt mosquitto


【解决方案1】:

我使用 MQTT 投入的 IOT 系统越多,我看到的这个用例就越多。

您需要的是 MQTT 代理。因此,您无需在两个 Broker 之间建立“桥梁”,而是设置一个 Proxy,该 Proxy 定义了可以传递给另一个 Broker 的规则。因此,如果有人在 Broker #1 上发布到“/home/UserB”,并且没有“规则”将其传递给 Broker #2,那就只能这样了。

这个想法是您的代理连接到另一个代理,并等待发布到它。列表是主题或主题/# 的设置,将在另一个代理上发布。我还设置了翻译以及 IE> /home/UserB => /Org1/status/event 以隐藏实际的原始主题。

如果跨组织的流量不太大,可以在 Container 内完成。

我会发布一些代码,但我编写的所有 MQTT 代理都是客户 IP。它的代码写起来并不可怕。 ...也许我应该写一个公共领域的版本...

【讨论】:

  • 我同意你关于 MQTT 代理的想法。但我的问题并没有完全解决。如果我这样做“A list is setup of Topics or Topics/# that will be Published over on the other Broker.”,组织 2 中的用户 B 如何知道他必须订阅哪个主题才能接收消息?
  • 他们会以同样的方式发现原始主题——有人会告诉他们。设置代理的人会告诉双方用于发布和订阅的主题。为此需要一个管理功能,但任何其他解决方案也需要它。
  • 也许您正在寻找这样的东西? github.com/robertsLando/Mqtt2Mqtt
猜你喜欢
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2015-10-28
  • 2022-06-14
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多