一、说明
1、物联网项目,使用mqtt较多
2、一般小项目都是用emqx作为mqtt的服务
3、集群情况下,需要保证只有一次消费
4、考虑性能或者业务场景,可能需要用到延迟发布
5、windows端,准备mqttx,用于测试;MQTTX链接
https://www.emqx.com/zh/downloads/MQTTX
6、可以使用自建的emqx服务,也可以使用emqx开放的公共服务
broker.emqx.io1883
~~
二、共享订阅
1、共享订阅,一般用于消费者为集群服务时,建立共享组,确保消息只被消费一次。
2、单机服务情况下,一个生产者对应一个消费者;当数据量达到一定程度时,消费者可能就需要扩展;即一个生产者多个消费者;emqx共享订阅是支持负载均衡的,所以在实际业务场景中,共享订阅或共享组是经常用到的。
3、共享组的topic在在订阅有所区别
4、首先明确,共享订阅分为两种
1) 不带组的共享订阅,topic存在前缀 $queue
2) 带分组的共享订阅,topic存在前缀 $share/${groupName}
说明: 不带组的共享订阅其实是带分组的共享订阅的一种特例,即把所有的订阅者放到了一个组
5、举例-$queue
1)发布者topic(推数据)
hg/001hg/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: 带分组共享订阅,保证的是在组内多个订阅者中,消费一次。
4)示例图-$share
说明1: 发布者topic: hg/002
说明2: 订阅者topic: $share/g1/hg/002
说明3: g1即分组名称,可以自定义
~~
三、延迟发送
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: 单位即,秒
~~