一開始,我寫的MQTT並是不單例模式,用到申請,用完銷毀。
后來有一次需要轉發300個設備的消息,cpu直接100%了,然后改為單例模式,這里順便插一句,對方鑒權用的設備ID做用戶名,然后對方收的永遠只有第一個設備的數據(一開始沒發現是第一個),於是這個問題斷斷續續繞了快一周(主要是大家手上都有事,不一定都有空)。
所以這里其實是記錄兩個問題,第一個就是 單例模式的MQTT消息丟失,只有少部分接收成功,很有可能是鑒權導致的。
第二個MQTT為什么會收到重復的數據,是因為習慣了之前的寫法,在單例模式的時候,每寫一個發布,就順便寫一個接收在那,忘記了事件會疊加,然后收到數據后,有幾個地方綁了接收事件,就重復幾遍數據。
正確的姿勢是,初始化的時候,聲明一個接收,然后就不管了,需要發布的地方直接發布,不用管接收
原諒我日志越來越粗糙,實在是沒有空