iT邦幫忙

0

MQTT Broker可以存取發布端的所有Message嗎?

  • 分享至 

  • xImage

最近公司要使用MQTT協議做開發。
但是有一個需求是希望MQTT Broker可以存取發布端的所有歷史資料。

在查找了相關信息後, 目前只有看到MQTT Broker可以使用Retain Message功能。 但是這個只能一個Topic存一筆資料。
所以想要確認一下是否能實現存所有資料的功能?

使用的MQTT Broker 是 Mosquitto
Library 是 Golang的 https://github.com/eclipse/paho.mqtt.golang

謝謝

harrytsai iT邦新手 1 級 ‧ 2022-03-31 16:49:09 檢舉
我之前的公司是設計把資料打到PHP寫的後台裡面
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
xiang753017
iT邦新手 3 級 ‧ 2022-04-04 23:57:59
最佳解答

不行! 請試想一下,broker 要存過去的所有訊息本身就不合理,因為如果不清的話記憶體會爆炸...
如果想這樣做,你可以使用其他的如redis的資料庫把你要的東西都存起來才對

0
coreyborad
iT邦新手 5 級 ‧ 2023-03-03 13:49:51

MQTT broker主要是用來做訊息傳遞的
讓你可以處理pub/sub類型的資料交換需求
因此,資料儲存不是他的主要目的

你要儲存歷史資料,你有幾個方向可以思考

  1. 參考時序資料庫的作法,例如influxdb的生態系
    influxdb有出telegraf可以幫助你直接橋接mqtt broker的message到他們的db
    就不用另外再寫code處理

  2. 自己寫一個subscriber server去轉存data
    你用的語言是golang,利用他去長期的subscriber你要的topic資料
    在裡面做轉存的動作,例如存到mysql或是其他no sql db
    這方面有很多延伸問題,例如subscriber server掛掉了,有沒有queue server去做暫存資料
    像是Kafka就有提供類似的解決方式

  3. 換別套支援度更豐富的MQTT broker,例如EMQX
    EMQX有支援資料轉存的服務,你也可以考慮用他們的生態系
    這樣也可以省下很多時間

另外,要提醒你,架設自有的MQTT broker是需要維護的,不要以為MQTT broker是永遠不會壞的
如果公司在維運方面沒有適當的資源
建議可以用公有雲的方案,例如AWS IoT Core, AWS Kinesis

我要發表回答

立即登入回答