關於Topic設計的思考

2021-10-23 05:57:44 字數 1618 閱讀 2749

topic 的數量隨著業務的增長逐漸增多,如何正確的設計 topic 成了當務之急。在這篇文章中,將重點討論mqtt 主題和最佳實踐。

topic是utf-8字串,broker用於過濾客戶端的訊息,乙個topic由乙個或多個主題層組成,每個主題級別用/分割。

home/floor/room/sensor
home/floor/

+/temp //此主題訂閱與以下主題匹配或不匹配,√:匹配 ×:不匹配

home/floor/kitchen/temp √

home/floor/room/temp √

home/floor/kitchen/brightness ×

home/firstfloor/kitchen/temp ×

home/floor/kitchen/fridge/temp ×

home/floor/# //此主題訂閱與以下主題匹配或不匹配,√:匹配 ×:不匹配

home/floor/kitchen/temp √

home/floor/livingroom/brightness √

home/firstfloor/kitchen/temp ×

topic和payload設計方案一般有如下兩種,當然還有其它更多的組合

攜帶盡可能多的資訊 payload

plant1/machinea/sensorx/temp/value 20

plant1/machinea/sensorx/temp/unit ℃

plant1/machinea/sensorx/temp/date 2020-04

-1112:

12:12 payload攜帶盡可能多的資訊

plant1/machinea/

]}

儘管可以按照自己的喜好設計topic,應當注意的是,不同的設計會帶來不同的影響,除了影響語義的清晰性,也可能影響系統效能。

例如屋子裡有10個感測器,

在風格house/sensor01…house/sensor1中,house/sensor01 訊息只發給sensor01(只有乙個訂閱者)

在風格house中,10個感測器都訂閱它,payload為的訊息將傳送給10個感測器,每個感測器都需要檢查訊息以檢視他是否適合自己。

因此有如下建議:

topic命名注意:

/home/floor/house
等於在最前面有乙個空字串層級,完全沒有必要,且增加了broker的處理,

home/floor/house
才是合理的。

myhome/livingroom/temperature,

myhome/livingroom/brightness,

myhome/livingroom/humidity,

而不是通過myhome/livingroom傳送所有的值。這樣也便於你使用其他的 mqtt 功能,

home/bedroom/bedlight/rgb/set

mqtt topic and payload design notes

Unity C 關於設計模式的思考

一 當你的專案發現有如下問題之一時,就需要考慮重構 可能會有某種模式適合。1 無法進行單元測試。2 需求的變動總是導致 的變動。3 有重複 的存在。4 繼承層次過多。5 隱藏的依賴過多。二 uml表示法 1 uml類圖 代表public,代表protected,代表private,即 代表變數 pu...

關於設計思維的理解與思考

面對一項工程或者事業,我們需要擁有乙個確定且有效的思維方式來指導我們去應對解決問題。這時 設計思維 這一全新的思維方式出現在了我的面前。通過一段時間的學習,我對設計思維產生了一些初步的理解與思考。什麼是設計思維?在我看來 設計思維 不僅包含了完成一項事業所需的種種方法而且在更高的層次上指出了如何實現...

關於設計思維課程的學習思考

可樂瓶遊戲 兩元錢一瓶可樂,兩個空瓶子可以換一瓶新的可樂,有六元錢,問最多可以喝到多少瓶可樂。在可樂瓶遊戲之後,課程又介紹了迷宮遊戲與棉花糖挑戰等遊戲,這些遊戲都有乙個共同的特點 打破常規,都可以讓我們看到不一樣的想法與其所能達到的效果。棉花糖挑戰 乙個棉花糖,8根義大利面,乙個膠帶乙個剪刀,18分...