EMQX用戶指南-共享訂閱

共享訂閱

共享訂閱是在多個訂閱者之間實現負載均衡的訂閱方式:

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

上圖中,共享 3 個 subscriber 用共享訂閱的方式訂閱了同一個主題 share/g/topic,其中topic 是它們訂閱的真實主題名,而share/g/ 是共享訂閱前綴。EMQ X 支持兩種格式的共享訂閱前綴:

類型 格式 示例 說明
帶群組的共享訂閱 $share/<group-name>/真實主題 $share/abc/t/1 真實發布主題是t/1, 群組名為abc, 多個訂閱$share/abc/t/1的客戶端, 一個消息發布時只有一個客戶端能收到
不帶群組的共享訂閱 $queue/真實主題 $queue/t/1 queue/ 為前綴的共享訂閱是不帶群組的共享訂閱。它是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 的哈希值
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容