在MQTT协议的上下文中,有没有办法让客户端在没有该主题的订阅者时不发送发布消息?
换句话说,是否存在执行订阅者感知发布的标准方法,从而减少从发布客户端到代理的网络流量?
这在我们有许多能够产生大量数据的传感器的应用中很重要,但大多数时候没有人会对所有这些数据感兴趣但是只有很小的子集,我们希望节省电池或避免网络拥塞
答案 0 :(得分:2)
在即将发布的MQTT v5规范中,当客户端发布到该主题时,代理可以向客户端指示主题没有订户。这仅适用于QoS 1或QoS 2发布,因为QoS 0消息不会导致回复。
答案 1 :(得分:1)
不,发布商完全不知道给定主题有多少订阅者,可能有零或数千。
这是发布/订阅消息传递的关键点,即信息生产者和消费者几乎完全脱钩。
答案 2 :(得分:1)
据推测,您可以设计设备和应用程序以便设备以及将数据发布到“数据主题”,它还可以订阅另一个特定于设备的“命令主题”来控制设备数据发布。如果应用程序对来自特定设备的数据感兴趣,则必须知道哪个设备要知道要订阅哪个数据主题,因此它可以将“请立即发布数据”命令发布到相应的命令主题。
我认为可能存在一种介于两者之间的解决方案,其中设备在没有应用程序感兴趣时发布数据的频率较低,并且当至少一个应用程序要求发布数据时速度更快。
对我来说,关于MQTT的一点是,理想情况下,您应该将设备和应用程序设计为一个系统,而不是孤立的。