日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

如何订阅MQTT服务器历史消息,mqtt集群订阅如何只消费一个(一次)消息?

發布時間:2025/3/21 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何订阅MQTT服务器历史消息,mqtt集群订阅如何只消费一个(一次)消息? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

共享訂閱

在實踐中我們的業務系統集成是集群存在,對于mqtt消息,如果沒有做特殊處理,那么集群中每個服務只要訂閱了mqtt中的一個主題,那么每臺服務器都會進行消費。不僅浪費資源,還限制了服務的處理上限。

因此,有不少朋友在問這類問題:走MQTT協議,兩個訂閱者都訂閱同一個topic,向該topic發布一個消息,怎么只讓其中的訂閱者消費?

針對這個問題,筆者經過實踐發現,可以通過broker共享訂閱機制來解決此問題。

什么是共享訂閱

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

[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 支持兩種格式的共享訂閱前綴:

如何實現共享訂閱

以emqx為例,可通過三方面來進行配置:

第一,配置emqx,開啟共享訂閱。

# etc/emqx.conf

# 均衡策略

broker.shared_subscription_strategy = random

# 適用于 QoS1 QoS2 消息,啟用時在其中一個組離線時,將派發給另一個組

broker.shared_dispatch_ack_enabled = true

在emqx.conf配置文件中,通過shared_subscription_strategy指定共享訂閱均衡策略。通過shared_dispatch_ack_enabled設置為true來開啟共享訂閱功能。

其中random表示在所有訂閱者中隨機選擇,round_robin表示按照訂閱順序,sticky表示一直發往上次選取的訂閱者,hash表示按照發布者 ClientID 的哈希值。

第二,消息發布。消息發布者與正常的消息發布一樣,比如定義了這樣一個topic路徑。

iot/equipment/heart

第三,消息訂閱

訂閱的時候通過添加$queue前綴或$share前綴進行共享訂閱。

$queue/iot/equipment/heart

// 或

$share/iot/equipment/heart

一定要注意,真是的topic是iot/equipment/heart,因此發布的時候只能用這個路徑。而訂閱時添加上$queue/或$share/前綴來表示是基于不帶群組的共享定義還是待群組的共享訂閱。

如果發布的主題直接添加上兩個前綴的一個,則消息是無法正常發送的。

關注公眾號:程序新視界,一個讓你軟實力、硬技術同步提升的平臺

除非注明,否則均為程序新視界原創文章,轉載必須以鏈接形式標明本文鏈接

總結

以上是生活随笔為你收集整理的如何订阅MQTT服务器历史消息,mqtt集群订阅如何只消费一个(一次)消息?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。