共享订阅
上图中,共享 3 个 subscriber 用共享订阅的方式订阅了同一个主题 ,其中topic
是它们订阅的真实主题名,而 是共享订阅前缀。EMQX 支持两种格式的共享订阅前缀:
以 $share/<group-name>
为前缀的共享订阅是带群组的共享订阅:
group-name 可以为任意字符串,属于同一个群组内部的订阅者将以负载均衡接收消息,但 EMQX 会向不同群组广播消息。
s1,s2,s3 中只有一个会收到 msg1
EMQX 的共享订阅支持均衡策略与派发 ACK 配置:
均衡策略 | 描述 |
---|---|
hash_clientid | 按照发布者 ClientID 的哈希值 |
hash_topic | 按照源消息主题的哈希值 |
local | 优先选择和发布者在同一各节点的共享订阅者来派发消息,否则进行随机派发 |
random | 在所有订阅者中随机选择 |
round_robin | 按照一个固定的顺序选择下一个订阅者 |
sticky | 首次分发时随机选择一个订阅者,后续消息一直发往这一个订阅者直到该订阅者离线或该发布者重连 |
提示
无论是单客户端订阅还是共享订阅都要注意客户端性能与消息接收速率,否则会引发消息堆积、客户端崩溃等错误。