1. 程式人生 > >rabbitmq mqtt外掛整合填坑記錄(些許個人拙見,不對還望指出)

rabbitmq mqtt外掛整合填坑記錄(些許個人拙見,不對還望指出)

mqtt:Message Queuing Telemetry Transport,訊息佇列遙測傳輸

名字很霸氣,適合物聯網感測器窄頻寬網路不穩定的環境,可以持久化,推送離線保活訊息,且可以使用mqttjs在web端使用。

mqtt的服務搭建也很簡單,我用的rabbitmq,一行命令啟用,重啟rabbitmq即可搭建成功。

使用也很簡單,需要注意幾個關鍵點

1,qos(0最多收到一次 1至少收到1次 2保證只收到一次)

2,Retained 可以讓新訂閱的客戶端得到釋出方的最新的狀態值,而不必要等待發送,此操作屬於持久化操作,重啟服務依然可以收到。

3,CleanSession保證離線後再連線是否收到訊息,預設離線訊息是存記憶體,重啟會丟失,除非設定持久化,注意接收離線訊息clientid必須固定

4,ConnectionTimeout超時時間

5,KeepAliveInterval會話心跳時間

坑1,springboot整合

因為springboot整合眾多訊息釋出訂閱的服務,因此只有基本功能,且整合的paho版本過低,mqtt個別高階功能無法使用,spring中有些方法又是針對別的訊息服務才有的而mqtt沒有,因此整合mqtt不建議使用springboot的整合版本,建議使用mqttclient的包或者paho的包自己實現(個人拙見)

坑2,Qos=2報錯,已斷開連線 (32109) - java.io.EOFException

確切的說,這是rabbitmq的坑,官網mqtt介紹首頁即描述了,一直沒注意,另外,據說mqtt3.1也有此問題,升級到3.1.1解決

  • QoS0 and QoS1 publish & consume
  • QoS2 publish (downgraded to QoS1)

坑3,mqttjs在rabbitmq上整合

需要自己下載原始碼編譯安裝mqtt-web-plugin外掛,試了好幾次都沒編譯過去,看老外的帖子在這幾乎都沒遇到啥問題,日了狗了。。。

參考:https://stackoverflow.com/questions/19813101/java-io-eofexception-with-paho#