【问题标题】:is mqtt support both one to many and many to one?mqtt 支持一对多和多对一吗?
【发布时间】:2015-09-12 15:44:17
【问题描述】:

最近我读了一篇物联网文章 http://www.eclipse.org/community/eclipse_newsletter/2014/february/article2.php 在这里他说,通过 mqtt 协议,客户端可以以一对多和多对一的方式进行通信。在 mqtt 规范本身中提到了一对多,但我对多对一几乎没有混淆。我的理解是,许多客户都在同一主题上发布,而这些不同的发布者只有一个订阅者。那么订阅者(用户)应该如何识别消息属于哪个发布者? 另一个疑问,如果两个发布者使用相同的主题发布他们的数据而不知道对方,因为每个客户端都连接到互联网,订阅者将获得两个数据。但这不是订阅者所期望的。他只需要来自一个发布者的数据。 mqtt通信有没有机会出现同样的场景?

【问题讨论】:

    标签: mqtt


    【解决方案1】:

    这里有一些关于 MQTT 的事实,可能会帮助您理解。

    1. 发布者不“拥有”主题。出版商可以选择 向任何主题发布消息(假设它是有效的 MQTT 主题)。

    2. 鉴于上述第 1 点,任意数量的发布者可以同时 发布到同一主题。

    3. 客户端可以选择订阅 特定或通配符主题以接收发布的信息 任何出版商。
    4. 客户端既可以是发布者也可以是订阅者 (客户甚至可以收到自己发布的 消息)。
    5. MQTT 代理负责管理所有 客户之间的关系。客户不知道(或关心)哪个 其他客户端当前连接到代理。出版商和 订阅者完全解耦,尽管他们可以通信 使用 MQTT 功能(发布/订阅)。
    6. 有可能是 发布者的消息被丢弃,因为没有订阅者 目前对该消息感兴趣。 (例如:出版商发布到 主题“主题1”。如果之前没有订阅者请求过 订阅“topic1”,消息将被 MQTT 丢弃 代理,因为它没有客户端可以发送)。
    7. 单个发布者 可以一次发布到多个客户端。 (例如:10 个客户来 在线并请求订阅主题“topic1”。另一个客户 上线并发布到“topic1”。所有 10 个订阅者 “topic1”将收到消息。发布者只需将一条消息发布到 MQTT 代理,MQTT 代理负责将消息转发给所有 10 个订阅者。

    希望这些信息能帮助你理解,如果我还有什么不清楚的地方,请告诉我。

    【讨论】:

    • “鉴于上述第 1 点,任意数量的发布者可以同时发布到同一主题。”这是什么意思?,所以如果两个客户端发布到同一个主题,例如:“topic1”(假设这两个客户端都不使用主题层次结构,只是“topic1”)。另一个客户端订阅“topic1” ,那么他将收到两个值。但是他如何分离两个发布者客户的值?而且如果订阅者客户端只对一个发布者客户端感兴趣,那么他如何阻止其他发布者的价值?
    • 我建议阅读发布/订阅模式:en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern。为了具体回答您的问题,由于您拥有自己的主题架构,您可以轻松地设计您的系统,让发布者发布到他们自己的主题。请记住,发布/订阅模式努力保持发布者和订阅者之间的松散耦合。如果您的订阅者需要知道哪个发布者正在发送特定消息,那么您可能没有正确设计您的系统。
    • 我也许可以澄清一下 - 考虑定义光状态的照明控制消息,例如色调灯泡。您可以让主题 /house/hue//state 涵盖各种 buib 的状态信息,如果消息包含发布者 ID,那么如果它是照明控制器,则它是关于什么是的声明,并且其他任何东西都代表对可能的请求 - 灯光控制和客户端都发布和订阅同一组 url,并使用发布者信息进一步过滤数据
    【解决方案2】:

    “发布者的消息可能被丢弃,因为当前没有订阅者对该消息感兴趣。(例如:发布者发布到主题“topic1”。如果之前没有订阅者请求订阅“topic1”,则该消息将被 MQTT 代理丢弃,因为它没有客户端可以发送给它)” 即使通过设置保留标志发布也适用吗?因为我知道如果设置了保留标志,代理将存储该特定主题的会话,并且只要订阅者可用于同一主题。代理会将这些消息移交给订阅的客户端。

    【讨论】:

    • 部分正确。 MQTT 代理将仅保留在给定主题上发布的最后一条消息(如果 QoS 值为 0,则可以随时丢弃它)。为了给你一个例子来说明这在哪里很有用,让我们来看一个股票市场应用程序。每次有新数据可用时,发布者都会发布市场数据(主题:GOOG,有效负载:650.50$)。设置了保留标志后,订阅者将收到最新的可用数据,而不必等到发布者发布消息才能知道 GOOG 股票的价格。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2011-08-29
    • 2018-10-08
    • 2011-03-08
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多