【MQTT】 emqx | mqtt | 共享订阅、延迟发布 | 分组订阅 | 集群订阅
1、物联网项目,使用mqtt较多2、一般小项目都是用emqx作为mqtt的服务3、集群情况下,需要保证只有一次消费4、考虑性能或者业务场景,可能需要用到延迟发布5、windows端,准备mqttx,用于测试;MQTTX链接6、可以使用自建的emqx服务,也可以使用emqx开放的公共服务~~
一、说明
1、物联网项目,使用mqtt较多
2、一般小项目都是用emqx作为mqtt的服务
3、集群情况下,需要保证只有一次消费
4、考虑性能或者业务场景,可能需要用到延迟发布
5、windows端,准备mqttx,用于测试;MQTTX链接
https://www.emqx.com/zh/downloads/MQTTX
6、可以使用自建的emqx服务,也可以使用emqx开放的公共服务
broker.emqx.io
1883
~~
二、共享订阅
1、共享订阅,一般用于消费者为集群服务时,建立共享组,确保消息只被消费一次。
2、单机服务情况下,一个生产者对应一个消费者;当数据量达到一定程度时,消费者可能就需要扩展;即一个生产者多个消费者;emqx共享订阅是支持负载均衡的,所以在实际业务场景中,共享订阅或共享组是经常用到的。
3、共享组的topic在在订阅有所区别
4、首先明确,共享订阅分为两种
1) 不带组的共享订阅,topic存在前缀 $queue
2) 带分组的共享订阅,topic存在前缀 $share/${groupName}
说明: 不带组的共享订阅其实是带分组的共享订阅的一种特例,即把所有的订阅者放到了一个组
5、举例-$queue
1)发布者topic(推数据)
hg/001
hg/002
说明1:001,002为业务ID
2)订阅者(消费数据)
$queue/hg/001
$queue/hg/002
3)示例图
说明1: mqttx一个连接,订阅topic唯一;所以需要建立多个mqtt连接,用于模拟多个发布者或订阅者
说明2: 发布者,只需要往topic发数据即可;订阅者使用共享订阅,在topic前面增加"$queue/“前缀即可
说明3: 带分组订阅也是如此;不过前缀不同;即发布者,只需往topic发数据即可;订阅者需要增加topic前缀"$share/${groupName}
说明4: 带分组共享订阅,保证的是在组内多个订阅者中,消费一次。
说明5: 如果只是确保消费集群仅消费一次,使用$queue即可;也可以使用唯一的$share
说明6: $share多个群组的使用场景
1)消息冗余备份,组A用于业务处理,组B用于消息备份不用于业务处理;
2)举例:生产者发送消息msg,若此时有$share/g1与$share/g2两个群组,那么,订阅$share/g1与订阅$share/g2均会收到消息msg;多个g1订阅者仅一个会收到;多个g2订阅者仅一个收到;即emq会将消息广播到多个群组,群组内保证消息仅被消费一次。
4)示例图-$share
说明1: 发布者topic: hg/002
说明2: 订阅者topic: $share/g1/hg/002
说明3: g1即分组名称,可以自定义
说明4: emqx默认为广播方式,即多个订阅者时,所有订阅者都会消费消息;分组订阅目的是为了解决多个订阅者时,消息仅被消费一次
~~
三、延迟发送
1、如果分组订阅指的是订阅者操作;那么延时发送就是发布者操作
2、延时发布依赖emqx的插件:emqx_mod_delayed
3、对比即理解
1)正常发布topic
hg/002
2)10秒后发布
$delayed/10/hg/002
3)2分钟后发布
$delayed/120/hg/002
说明1: 发布者通过增加前缀实现延时发布的效果
说明2: 单位即,秒
~~
四、分组订阅示例
0、示例说明
1)客户端工具使用mqttx
https://www.emqx.com/zh/downloads/MQTTX
2)mqtt服务使用开放的emqx服务
broker.emqx.io
1883
~~
1、普通订阅(1生1订)
1)1个生产者,1个订阅者
2)生产者topic
hg/demo
3)订阅者topic
hg/demo
4)示例截图
说明1: 发送与接收OK
2、普通订阅(1生多订)
1)1个生产者,多个订阅者
2)生产者topic
hg/demo
3)订阅者topic
hg/demo
4)示例截图
说明1: 多个订阅,均会收到消息(区别与分组订阅)
说明2: 使用mqttx时,创建多个client用多个name区分即可
~~
3、分组订阅(queue)
1)需要多个订阅者(至少2个)
2)生产者topic
hg/group1
3)订阅者
$queue/hg/group1
4)示例截图
说明1: 分组内,保证仅一个订阅者收到消息(区别与普通订阅)
说明2:一般用于订阅者集群时使用(确保唯一消费)
~~
4、分组订阅(多分组share)
1)需要多个订阅者(2个,1个订阅分组1+订阅分组2,另1个订阅分组1)
2)生产者topic
3)订阅分组1demo
$share/hg2/demo
4)订阅分组2
$share/hg3/demo
5)示例截图01
说明1: 客户端01,订阅两个分组;未接收到消息
说明2: 客户端02,订阅hg2分组,收到消息
说明3: 客户端03,订阅hg3分组,收到消息
结论: 分组内,多个订阅者,保证唯一消费者;分组间,广播
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)