解決spring-boot-Admin的服務端和客戶端不在同一個伺服器的通訊問題
SpringbootAdmin能夠用來監控專案的執行情況,其具體介紹以及初步入門大家可以參考部落格:
按照這篇部落格的內容進行配置的話,相信大家已經看到了執行的結果,結果還是非常令人興奮的(對於初次接觸這個東東的人而言)。既然有了這麼好用的東西,肯定要實際使用。接下來的使用中就遇到令人蛋疼的問題了,困擾了幾天。
先說一下問題:我按照上面的部落格,重新寫了server端,按照部落格的介紹把公司的一個專案配置成了客戶端。在我的win10系統電腦上面執行這兩個程式是沒有問題的。但是當實際部署的時候就遇到了問題:我把springbootAdmin的server端部署到了Linux系統伺服器(伺服器1),把要監控的專案部署到了另一臺Linux伺服器(伺服器2),這兩臺伺服器處於同一個區域網內。執行這兩個專案,發現程式server端能夠發現這個我的client專案,但是client專案一直處於斷開狀態。如圖:
檢視client端打印出來的log日誌,發現提示為:應用註冊失敗
然後檢視server端的log日誌(這裡強烈建議大家配置一下log日誌,這樣能夠看到專案執行的一些資訊):
這裡能夠發現問題:我的client端的ip地址根部就不是上面所寫的ip地址。那麼問題就弄清楚了,造成錯誤的原因是server端沒有獲取到正確的client地址,從而獲取client的各種資訊時失敗了。(這裡說的簡單,我實際查詢原因的時候也是費了很多的周折,深入到原始碼一級去研究整個過程才弄明白了錯誤原因。這裡好像我很厲害,其實原始碼大部分我是看不懂的)。
既然找到了問題的原因那接下來的解決問題就變得容易些了(我之所以耗了幾天就是因為定為不到問題的原因,從而在網上找不到正確的解決方法。之所以定為不到問題的原因,就是因為沒有對server端進行log配置。可見這裡log配置是多麼的重要啊!!!)。解決方法就是在client端新增如下的配置:
這個配置的所用就是告知server監聽的client的ip地址。有了這個配置後,server就可以根據正確的client地址獲取到client端的資訊了(看到有個部落格講過,當不配置這個屬性的時候,client預設會把電腦名稱傳送給server當做client的地址,這也就是上面的圖片中能夠看到PV3這個名稱的原因)。
總結:現在看來這個問題之所以是一個問題,原因就在於我們對springbootAdmin的配置不熟悉。其實只要認真的看springbootAdmin的參考手冊,參考手冊上面對這些配置都是進行了介紹的。
其中客戶端的所有配置屬性在3.4節表1,服務端的所有配置屬性在第4章表3。以後有時間的話要深入研究下這些屬性的作用。