MQTT之重復消息(6、在項目中遇到的問題)

項目背景:

? ? ? ?在 Spring Boot +?MQTT?5.0 環境中,RTU設備向SpringBoot平臺發送心跳數據、業務監控數據。同時SpringBoot平臺可以向RTU設備下發指令,RTU在執行完指令之后向平臺發送響應數據。

? ? ? ? 問題一、SpingBoot平臺發送指令給RTU設備,RTU設備能夠收到指令也能回復信息到相應的主題。SpringBoot平臺也訂閱該主題,但是沒有收到信息。

? ? ? ? 在遇到這個問題的時候,我發現控制臺的打印出了一個ERROR日志:

2025-03-06 11:11:31.652 [MQTT Rec: TerminalB] ERROR o.s.i.m.i.MqttPahoMessageDrivenChannelAdapter:362 - Lost connection: 已斷開連接; retrying...

排查思路:

1.首先需要明確哪些因素會導致出現斷開連接。因為收不到消息同時伴隨著ERROR日志的打印。

  • ?檢查網絡連接

?????????確保你的設備與MQTT服務器之間的網絡連接是穩定的。你可以嘗試ping服務器地址或使用網絡工具檢查連接質量。

  • ?檢查MQTT服務器狀態

????????確認MQTT服務器正在運行且沒有遇到任何問題。如果可能,嘗試連接到服務器的其他客戶端(例如另一個設備或應用程序)以驗證服務器是否可用。

  • ?檢查MQTT客戶端配置????????????

  • ? ? 主機名和端口:確保客戶端配置中的MQTT服務器地址和端口號是正確的。

  • ? ? 客戶端ID:每個客戶端都應該有一個唯一的ID。確保沒有兩個客戶端使用相同的ID連接至同一服務器。

  • ? ? 用戶名和密碼:如果服務器啟用了認證,確保提供了正確的用戶名和密碼。

  • ? ? 清潔會話:根據你的需求設置cleanSession。如果是true,它將刪除之前的會話信息;如果是false,它將保留會話信息。

  • ? 檢查防火墻和安全組設置

????????確保沒有防火墻或安全組規則阻止客戶端與MQTT服務器之間通信。這包括入站和出站規則。

2、SpringBoot平臺訂閱了很多主題的消息,比如心跳主題,業務監控主題等,之前是不會出現信息訂閱不到。說明主機名和端口、用戶名密碼,是正確的。

3、現在還剩下三項沒有排除,客戶端ID、清潔會話、防火墻。因為心跳是正常的,所以說清潔會話和防火墻是沒問題的,如果這兩個有問題那心跳主題的信息我們平臺也是收不到的。

4、目前只剩下客戶端ID這個因素。現在已經大致明確了是因為這個因素導致,接下來我們需要分析一下為什么出現這個問題,之前是正常的。通過回憶實際操作,我發現SpingBoot平臺訂閱不到消息之前,我通過SpringBoot平臺向某一臺RTU設備發送了一個修改頻率的指令。然后我又分析日志信息,發現當我發送消息之后,控制臺出現了斷開連接的錯誤。好,現在我把所有的操作和具體的報錯信息聯系在一起,問題就比較清晰了。我發送了一個指令,控制臺報錯:斷開連接,然后RTU執行指令,然后RTU向響應主題發送消息,我們SpingBoot平臺收不到了。

? ? ? ? 再把上述的問題精簡一下對于SprintBoot平臺其實就是兩個操作,一個是平臺利用MQTT發送消息,另一個就是平臺利用MQTT訂閱消息。當我發送完消息,平臺訂閱不到消息,同時出現斷開連接。這個時候我就明確了錯誤所在,發布是一個客戶端行為,訂閱也是一個客戶端行為,但是我們在代碼里面把訂閱ID和發送ID設置成了相同的,如下:

    subClientId: adminpubClientId: admin

? ? ? ? 也就是平臺發送指令的時候把訂閱的連接頂掉了,這個時候出現了訂閱斷開連接的錯誤日志。然后RTU發送響應消息到訂閱主題,但是這個時候平臺的訂閱已經斷開鏈接,所以說平臺一直收不到響應消息。以上就是我分析這個問題的具體思路,在此僅作個人記錄,如有分析錯誤的地方,歡迎大家留言指導。

問題二、SpingBoot平臺在啟動之后,一直在重復打印一條消息,而且RTU設備并沒有發送任何消息到MQTT的服務器,通過觀察該消息是間隔固定的時間重復打印。

? ? ? ??排查思路:

1、我先排查這一條消息的出處到底在哪里來的。通過對比發現,這一條是昨天RTU的消息,并不是今天的,所以說很奇怪。

2、MQTT通訊中我的平臺也是一個客戶端,客戶端本身不存儲消息,只有可能是服務器端存儲。

3、前邊幾篇文章分析的有消息重復接受的原因,主要是消息質量為1的時候,MQTT協議本身重發導致。還有就是tcp的重發,但是在這里不存在tcp重復的因素。那只能是消息質量為1的時候,協議本身導致。

4、現在分析出主要是消息質量為1的時候導致,那就說明broker給平臺發送消息的時候可能存在兩種情況,第一就是broker收到多次重復消息,導致broker也給平臺發送多次消息。第二、就是平臺收到broker消息,但是平臺沒有給broker發送回復消息。

5、如果是第一種情況,那我平臺正常啟動,就能消費訂閱的信息,就不會出現我現在這種不斷重復打印的情況,所以說第一種情況排除。

6、那現在肯定是第二種情況,平臺沒有給broker發送響應消息。現在開始回顧代碼,為什么沒有發送響應消息。仔細觀察代碼發現,我訂閱的時候使用通配符訂閱了所有消息,恰好沒有對RTU執行代碼之后發送消息的主題進行代碼處理,導致broker一直收不到我的平臺反饋,所以說broker一直不斷地給平臺發送信息。

7、綜上所述這就是我重復消息不停輸出的原因。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73994.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cesium 全面介紹

一、Cesium 是什么? Cesium 是一個開源的 JavaScript 庫,專門用于構建高性能的 3D 地理空間可視化應用。它基于 WebGL 技術,無需插件即可在瀏覽器中渲染全球地形、影像、3D 模型、矢量數據等,支持從衛星視角到地下管網的 全維度空…

Trae-中國首款免費AI原生IDE

Trae 簡介 Trae 是由字節跳動于2025年1月推出的國內首個原生AI集成開發環境(IDE),旨在通過AI技術賦能開發者,簡化編程流程。其核心功能基于Claude 3.5和GPT-4o等先進AI模型,支持智能代碼生成、優化及多模態交互&#…

1.3 斐波那契數列模型:LeetCode 746. 使用最小花費爬樓梯

動態規劃解最小花費爬樓梯問題:LeetCode 746. 使用最小花費爬樓梯 1. 題目鏈接 LeetCode 746. 使用最小花費爬樓梯 題目要求:給定一個整數數組 cost,其中 cost[i] 是從樓梯第 i 階向上爬所需支付的費用。你可以從下標 0 或 1 的臺階開始爬&a…

游戲開發中的貝塞爾曲線:感受絲滑的數學之美

這是一篇vip文章,如果你還不是vip,可以移步https://www.ilikexff.cn/articles/165免費閱讀。 介紹 貝塞爾曲線是計算機圖形學中最重要的概念之一,以其在表示曲線時的靈活性和精確性而聞名。廣泛應用于計算機圖形學、動畫、路徑規劃等領域的數學曲線。 貝塞爾曲線的數學原理基…

強化學習課程:stanford_cs234 學習筆記(2)introduction to RL

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言5、強化學習課程大綱5.1 課程內容主:5.2 馬爾可夫決策過程:5.2.1 馬爾可夫性 markov propterty5.2.2 馬爾可夫過程 markov process5.2.3…

第 26 場 藍橋月賽 部分題解

第 26 場 藍橋月賽 2.燈籠猜謎3.元宵分配4.擺放湯圓5.元宵交友(運行超時 通過90%) 2.燈籠猜謎 分析:以當前位置為視角,要想移動的距離盡可能的少,按順序猜謎語,給你一個區間,有三種情況&#xf…

JAVA實戰開源項目:體育館使用預約平臺(Vue+SpringBoot) 附源碼

本文項目編號 T 144 ,文末自助獲取源碼 \color{red}{T144,文末自助獲取源碼} T144,文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

解決【vite-plugin-top-level-await】 插件導致的 Bindings Not Found 錯誤

解決【vite-plugin-top-level-await】 插件導致的 Bindings Not Found 錯誤 環境設置 操作系統: macOS硬件平臺: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 項目時,我們嘗試集成 vite-plugin-top-level-await 插件以支持頂層 await 語法。然而&#xff…

推薦系統(十九):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用(二)

在上一篇文章《推薦系統(十八):優勢特征蒸餾(Privileged Features Distillation)在商品推薦中的應用》中,筆者實現了一個基于 PFD 思想的 Demo。其中,Teacher 模型和 Student 模型都是簡單的單任務(CTR)模型,在本節,筆者將基于 PFD 思想實現一個多任務模型:其中,Tea…

深度學習之卷積

從全連接到卷積 MLP的缺陷,假設有如下的場景: 分類貓和狗的圖片 使用一個還不錯的相機采集圖片(12M像素)RGB圖片有 36M元素使用100大小的單隱藏層MLP,模型有 3.6B元素 遠多于世界上所有貓和狗總數(900M狗,600M貓) …

目標識別與雙目測距(1)環境搭建:Ubuntu+yolov5+pcl庫

環境情況 ubuntu 18.04 → 20.04(最終) 安裝Ubuntu1804虛擬機系統 Anaconda:可參考我的另一篇文章 Python 3.6.13 → 3.8(最終)Anaconda3-2021.05 目標識別:YOLOv5相關 1、安裝git sudo apt install gi…

LinuxTCP/UDP基礎概念

TCP(傳輸控制協議) TCP 是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它的主要特點包括: 面向連接:在傳輸數據之前,需要通過“三次握手”建立連接;傳輸結束后,通過“四次揮手”斷開…

MP3、WAV、RM、PNG格式

MP3、WAV、RM、PNG格式 MP3 是一種音頻壓縮格式,采用了 MPEG-1 Audio Layer 3 或 MPEG-2 Audio Layer 3 編碼標準.MP3 格式能夠以較小的文件大小存儲高質量的音頻,可在多種設備如手機、MP3 播放器、電腦上播放,是目前應用最廣泛的音頻格式之一. MPEG-1 是MPEG(Moving Pictu…

力扣hot100:滑動窗口——找到字符串中所有字母異位詞

題目鏈接:找到字符串中所有字母異位詞 考慮用滑動窗口,窗口大小固定為字符串p的長度,用一個for循環控制子串的結束位置。 怎么判斷是字母異位詞? 1、排序:字符串中所有符合條件的字母異位詞與目標串p在經過排序后是…

人工智能通識速覽一(神經網絡)(編輯中)

上篇:人工智能通識速覽一(機器學習) 人工智能通識速覽一(機器學習)(編輯中)-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【數據標準】數據標準化框架體系-基礎類數據標準

導讀:數據標準化的四大基礎類標準(業務術語、業務規則、命名規范、代碼標準)是企業數據治理的核心支柱。主要作用體現在?消除業務與技術間的語義鴻溝?(通過統一術語與命名規范),?保障數據全生命周期的質…

可發1區的超級創新思路(python\matlab實現):MPTS+Lconv+注意力集成機制的Transformer時間序列模型

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒! 應用場景 該模型主要用于時間序列數據預測問題,包含功率預測、電池壽命預測、電機故障檢測等等。 一、模型整體架構(本文以光伏功率預測為例) 本模型由多尺度特征提取模塊(MPTS)…

深入解析C#中的解釋器模式:原理與應用

解釋器模式(Interpreter Pattern)是一種行為型設計模式,旨在為特定的語言提供解釋和執行的能力。該模式將語言的文法規則封裝在類中,使得能夠靈活、動態地對這些規則進行解釋。在實際開發中,尤其是處理一些定制的表達式…

LeetCode知識點整理

1、Scanner 輸入: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 讀取整數int num scanner.nextInt();// 讀取一行字符串String line scanner.nextLine();scanner.close();…

紅寶書第二十一講:詳解JavaScript的模塊化(CommonJS與ES Modules)

紅寶書第二十一講:詳解JavaScript的模塊化(CommonJS與ES Modules) 資料取自《JavaScript高級程序設計(第5版)》。 查看總目錄:紅寶書學習大綱 一、模塊化的意義:分而治之 模塊化解決代碼依賴混…