EMQX用户指南-共享订阅

共享订阅

共享订阅是在多个订阅者之间实现负载均衡的订阅方式:

                                                   [subscriber1] got msg1
             msg1, msg2, msg3                    /
[publisher]  ---------------->  "$share/g/topic"  -- [subscriber2] got msg2
                                                 \
                                                   [subscriber3] got msg3

上图中,共享 3 个 subscriber 用共享订阅的方式订阅了同一个主题 share/g/ 是共享订阅前缀。EMQ X 支持两种格式的共享订阅前缀:

类型 格式 示例 说明
带群组的共享订阅 $share//真实主题 $share/abc/t/1 真实发布主题是t/1, 群组名为abc, 多个订阅$share/abc/t/1的客户端, 一个消息发布时只有一个客户端能收到
不带群组的共享订阅 $queue/真实主题 $queue/t/1 以 share 订阅的一种特例,相当与所有订阅者都在一个订阅组里面

带群组的共享订阅:

                                       [s1]
           msg1                      /
[emqx]  ------>  "$share/g1/topic"    - [s2] got msg1
         |                           \
         |                             [s3]
         | msg1
          ---->  "$share/g2/topic"   --  [s4]
                                     \
                                      [s5] got msg1

例如,假设订阅者 s1,s2,s3 属于群组 g1,订阅者 s4,s5 属于群组 g2。那么当 EMQ X 向这个主题发布消息 msg1 的时候:

    EMQ X 会向两个群组 g1 和 g2 同时发送 msg1

    s1,s2,s3 中只有一个会收到 msg1

    s4,s5 中只有一个会收到 msg1

不带群组的共享订阅:

                                       [s1] got msg1
        msg1,msg2,msg3               /
[emqx]  --------------->  "$queue/topic" - [s2] got msg2
                                     \
                                       [s3] got msg3

均衡策略与派发 Ack 配置

EMQ X 的共享订阅支持均衡策略与派发 Ack 配置, 可以在emqx.conf文件中配置

# etc/emqx.conf

# 均衡策略
broker.shared_subscription_strategy = random

# 适用于 QoS1 QoS2 消息,启用时在其中一个组离线时,将派发给另一个组
broker.shared_dispatch_ack_enabled = false

均衡策略 说明
random 在所有订阅者中随机选择
round_robin 按照订阅顺序
sticky 一直发往上次选取的订阅者
hash 按照发布者 ClientID 的哈希值

你可能感兴趣的:(EMQX用户指南-共享订阅)