对多个订阅者使用 MQTT
Using MQTT with multiple subscribers
我正在使用 mosquitto (http://mosquitto.org/) 作为 MQTT 代理,并且正在寻找有关负载平衡订阅者(同一主题)的建议。这是如何实现的?我读到的关于该协议的所有内容都指出,所有 同一主题 的订阅者将收到已发布的消息。
这似乎效率低下,因此我正在寻找一种方法,以确保负载平衡状态的循环方法将已发布的消息提供给其中一个连接的订阅者。
如果 MQTT 无法做到这一点,订阅者如何避免被消息淹没?
MQTT 是一个 Pub/Sub 协议,其基础是一对多的消息分发,而不是您描述的一对一(多)。您所描述的更像是一个消息队列系统,它与 Pub/Sub.
截然不同
Mosquitto 作为此协议的纯实现,不支持您描述的传送。一种解决方案是在订阅者中使用本地队列,将传入消息添加到线程池,然后由线程池使用。
我相信 IBM Message Sight 设备可能会提供您正在寻找的消息传递类型,作为对称为 Shared Subscriptions 的协议的扩展,但启用此功能后它会偏离纯 MQTT 规范.
通常,您设计 MQTT 应用程序的方式不会让订阅者不堪重负。您可以通过将负载分散到不同的主题来实现这一点。
如果您真的做不到,请查看 共享订阅 方法,像 MessageSight and HiveMQ 这样复杂的 MQTT 代理。这正是您正在寻找的功能,但它依赖于代理并且不是官方 MQTT 规范的一部分。
MQTT v5 支持共享订阅,mosquitto 1.6 版增加了对 MQTT v5 的支持。
关于共享订阅的好文章here
我正在使用 mosquitto (http://mosquitto.org/) 作为 MQTT 代理,并且正在寻找有关负载平衡订阅者(同一主题)的建议。这是如何实现的?我读到的关于该协议的所有内容都指出,所有 同一主题 的订阅者将收到已发布的消息。
这似乎效率低下,因此我正在寻找一种方法,以确保负载平衡状态的循环方法将已发布的消息提供给其中一个连接的订阅者。
如果 MQTT 无法做到这一点,订阅者如何避免被消息淹没?
MQTT 是一个 Pub/Sub 协议,其基础是一对多的消息分发,而不是您描述的一对一(多)。您所描述的更像是一个消息队列系统,它与 Pub/Sub.
截然不同Mosquitto 作为此协议的纯实现,不支持您描述的传送。一种解决方案是在订阅者中使用本地队列,将传入消息添加到线程池,然后由线程池使用。
我相信 IBM Message Sight 设备可能会提供您正在寻找的消息传递类型,作为对称为 Shared Subscriptions 的协议的扩展,但启用此功能后它会偏离纯 MQTT 规范.
通常,您设计 MQTT 应用程序的方式不会让订阅者不堪重负。您可以通过将负载分散到不同的主题来实现这一点。
如果您真的做不到,请查看 共享订阅 方法,像 MessageSight and HiveMQ 这样复杂的 MQTT 代理。这正是您正在寻找的功能,但它依赖于代理并且不是官方 MQTT 规范的一部分。
MQTT v5 支持共享订阅,mosquitto 1.6 版增加了对 MQTT v5 的支持。
关于共享订阅的好文章here