概述
mosquitto
共享订阅 - MQTT5新特性
概念
共享订阅是一种允许发送订阅主题组的消息到订阅组成员的的机制。标准的MQTT订阅,每一个订阅的客户端会收到消息的副本。而在共享的MQTT订阅中,订阅相同共享主题的所有客户端将会轮流收到消息,这种机制有时称为客户机负载平衡,因为单个主题的消息负载分布在所有订阅者之间。只要MQTT服务端支持共享订阅,则MQTT客户端可以通过标准MQTT订阅机制订阅共享主题,这意味着所有的常用mqtt客户端可以不用修改任何客户端代码就可以订阅共享主题,例如eclipse paho客户端。
共享订阅使用一个特殊的主题语法来订阅:
$share/GROUPID/TOPIC
共享订阅由三部分组成
- 固定 $share 开头
- 一个组ID
- 具体的订阅主题(可以包含通配符)
具体的例子
$share/my-shared-subscriber-group/myhome/groundfloor/+/temperature
如果两个客户端同时订阅了该主题,则两个客户端只会有一个客户端收到消息,并且是轮流收到消息的。
使用
两个客户端订阅以及收到消息的效果:
# mosquitto_sub -t "$share/group1/#"
aaa
# mosquitto_sub -t "$share/group1/#"
bbbb
客户端发布两条消息,两个订阅客户端各收到一条消息
# mosquitto_pub -t "group1/topic1" -m "aaaa"
# mosquitto_pub -t "group1/topic2" -m "bbbb"
使用场景
共享订阅有许多使用场景,通常是高可扩展场景,最流行的是以下几种:
- 客户端无法处理自行处理订阅负载平衡
- 有一些热点主题因为消息量比较多是可扩展性的瓶颈
效率测试
我做了一下简单的测试,对比共享订阅相对于普通订阅会不会降低效率,基于
- mosqutto2.0.12
- ubuntu18.04LTS
测试每秒发送N条1K消息,从结果来看,共享订阅相对普通订阅,效率并没有明显下降。
- 测试1~4看单个发送,多个接收的情况,此时还未达到服务器mosquitto瓶颈
- 测试5~8多个发送,多个接收的情况,此时已经达到服务器mosquitto瓶颈(CPU100%)
参考
- MQTT Client Load Balancing With Shared Subscriptions
最后
以上就是纯真龙猫为你收集整理的2019-07-10-mqtt-mosquitto系列13之共享主题mosquitto的全部内容,希望文章能够帮你解决2019-07-10-mqtt-mosquitto系列13之共享主题mosquitto所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复