一、共享订阅
注意:共享订阅是在订阅时设置topic的名字,延迟发布是在发布时设置topic的名字
(一)什么是共享订阅
EMQX的共享订阅跟RockerMQ里面的集群消费一样,是以集群为单位只消费一次消息。【RockerMQ 有两种消费模式一种是集群消费(以集群为单位进行消费)、一种是广播消费(以节点进行消费)。EMQX中默认是广播消费,也就是订阅了同一个主题的客户端都会消费每一条发布的消息】
EMQX中是支持共享订阅的(注意:共享订阅是MQTT协议中的一种订阅方式,也就是共享订阅不是EMQX特有的
)。
共享订阅也就是只要属于同一个集群,那么当有消息发布时,这个集群中只有一个节点会收到消息,也就是以集群为单位只被消费一次。
(二)怎么实现共享订阅
其实很简单,在MQTT中是通过topic的名字进行区分的,只要topic的名字以$ share/GroupName/topicName或者$ queue/ 为前缀。那么就是共享订阅。可以 参考官网
(三)使用MQTTX客户端测试
MQTTX安装很简单,百度MQTTX下载直接安装即可。
- 开两个客户端订阅同一个主题
- 订阅客户端01
- 同上面一样创建客户端02
- 分别给两个订阅的客户端添加一个订阅主题
# 这里的$share表示这个订阅为共享订阅,abc为分组名称(集群名称)t/1 为真正的topic名称
$share/abc/t/1
- 新建一个客户端【发布-01】使用它发布一条主题为t/1的消息
(四)负载均衡策略
涉及到了集群那么就会有负载均衡的存在。EMQX为我们提供了几种负载均衡策略
更改也很简单直接在配置文件中修改即可。
二、延迟发布
延迟发布类似与Rocker MQ里面的延迟消息。这个实现起来也很简单,也是通过topic前缀设置。(注意:他是在发布消息时设置的)
注意:此功能由 emqx-delay-publish 插件提供,该插件默认关闭,需要开启插件后才能使用此功能。
延迟发布主题的具体格式如下:
$delayed/{DelayInterval}/{TopicName}
1. $delayed : 使用 $delayed 作为主题前缀的消息都将被视为需要延迟发布的消息。延迟间隔由下一主题 层级中的内容决定。
2. {DelayInterval} : 指定该 MQTT 消息延迟发布的时间间隔,单位是秒,允许的最大间隔是 4294967 秒。如果 {DelayInterval} 无法被解析为一个整型数字,EMQ X 将丢弃该消息,客户端不会收到任何信 息。
3. {TopicName} : MQTT 消息的主题名称。
例如: - $delayed/15/x/y : 15 秒后将 MQTT 消息发布到主题 x/y 。
- $delayed/60/a/b : 1 分钟后将 MQTT 消息发布到 a/b 。
- $delayed/3600/$SYS/topic : 1 小时后将 MQTT 消息发布到 $SYS/topic 。