在没有订阅者时减少 MQTT 流量
Reduce MQTT traffic when there are no subscribers
在 MQTT 协议的上下文中,有没有办法让客户端在没有该主题的订阅者时不发送发布消息?
换句话说,是否有一种标准方法来执行订阅者感知发布,从而减少从发布客户端到代理的网络流量?
这在我们有许多能够产生大量数据的传感器的应用程序中很重要,但大多数时候除了一小部分数据之外没有人会对所有这些数据感兴趣,我们希望节省电池或避免网络拥堵。
不,发布者完全不知道给定主题有多少订阅者,可能有零个或数千个。
这是 pub/sub 消息传递的关键点,信息生产者和消费者几乎完全分离。
在即将发布的 MQTT v5 规范中,当客户端向该主题发布消息时,代理可以向客户端指示该主题没有订阅者。这仅适用于 QoS 1 或 QoS 2 发布,因为 QoS 0 消息不会导致回复。
大概您可以设计您的设备和应用程序,以便设备在向 'data topic' 发布数据的同时,还订阅另一个控制设备数据发布的特定设备 'command topic'。如果应用程序对来自特定设备的数据感兴趣,它必须知道要订阅哪个数据主题的设备,因此它可以将 'please publish data now' 命令发布到相应的命令主题。
我想可能有一个介于两者之间的解决方案,即当没有应用程序感兴趣时设备发布数据的频率较低,而当至少有一个应用程序请求发布数据时设备发布数据的频率更快。
在我看来,关于 MQTT 的一件事是您应该理想地将设备和应用程序设计为一个系统,而不是孤立地设计。
在 MQTT 协议的上下文中,有没有办法让客户端在没有该主题的订阅者时不发送发布消息?
换句话说,是否有一种标准方法来执行订阅者感知发布,从而减少从发布客户端到代理的网络流量?
这在我们有许多能够产生大量数据的传感器的应用程序中很重要,但大多数时候除了一小部分数据之外没有人会对所有这些数据感兴趣,我们希望节省电池或避免网络拥堵。
不,发布者完全不知道给定主题有多少订阅者,可能有零个或数千个。
这是 pub/sub 消息传递的关键点,信息生产者和消费者几乎完全分离。
在即将发布的 MQTT v5 规范中,当客户端向该主题发布消息时,代理可以向客户端指示该主题没有订阅者。这仅适用于 QoS 1 或 QoS 2 发布,因为 QoS 0 消息不会导致回复。
大概您可以设计您的设备和应用程序,以便设备在向 'data topic' 发布数据的同时,还订阅另一个控制设备数据发布的特定设备 'command topic'。如果应用程序对来自特定设备的数据感兴趣,它必须知道要订阅哪个数据主题的设备,因此它可以将 'please publish data now' 命令发布到相应的命令主题。
我想可能有一个介于两者之间的解决方案,即当没有应用程序感兴趣时设备发布数据的频率较低,而当至少有一个应用程序请求发布数据时设备发布数据的频率更快。
在我看来,关于 MQTT 的一件事是您应该理想地将设备和应用程序设计为一个系统,而不是孤立地设计。