docker部署springboot微服務時ip問題及consul註冊問題

問題1:docker部署springboot微服務在consul中註冊時,登錄consul控制檯發現該微服務的狀態爲critical狀態,看了一下日誌,發現是由於這個微服務是docker運行的,導致服務在向consul註冊時用的ip爲容器的id,consul在解析的時候出錯,所以導致服務註冊失敗。
解決方法:
看了上述的描述之後,自然而然地想法就是在微服務向consul註冊時,使用docker的虛擬ip,這樣consul就能夠解析該服務了(當然我的環境爲consul和微服務都運行在同一臺宿主機上,如果沒有部署在同一臺服務器就可能要自己搭建相關網絡了)。要達到這樣的目的,我們只要在springboot的配置文件application.yml文件中加入一項配置就可以了,如下圖:
在這裏插入圖片描述
加入紅色框框的配置之後,再查看啓動日誌的時候可以發現如下圖所示:
在這裏插入圖片描述address已經變成了docker容器的虛擬ip,這樣consul就可以正常解析這個服務了。
問題2:我這邊是有兩個微服務,一個作爲服務的提供者,一個既作爲提供者也做爲消費者,前者做完問題1的解決方式之後能夠正常註冊,後者集成feign做遠程調用,做完上述操作之後發現該服務的狀態還是爲critical,還是會導致服務註冊失敗,後面查了好久發現是consul的健康檢查失敗導致的,所以要去修改健康檢查的問題。
解決方法:
默認的檢查的接口爲actuator/health,前面再拼上ip+端口進行訪問,如果接口能夠調通,健康狀態就通過。我這裏的ip爲172.17.0.4,端口爲8012,此外還配置了一個contextPath爲oa-modeler,查看啓動日誌,發現
健康檢查的url爲http://172.17.0.4:8102/actuator/health,直接訪問這個路徑沒有任何返回,開始還以爲是沒加上contextPath,所以又把url改爲http://172.17.0.4:8102/oa-modeler/actuator/health,發現還是不行。
在網上也找了好久的資料發現關於這個問題的說明比較少,好多方案也不能解決我的問題,後來在這個https://www.jianshu.com/p/04ee0a235d2c裏面找到了解決方案。裏面提到了主要有兩種方案:
第一種就是在項目pom文件加上下面的依賴:

org.springframework.boot
spring-boot-starter-actuator

這種方案在我這個項目不起作用,不知道爲什麼還是註冊失敗。
第二種方案就是自己重寫健康檢查的接口,我在項目中寫了一個很簡單的接口如下:
在然後在配置文件裏添加一項如下:這裏插入圖片描述
然後在配置文件裏添加一項如下:
在這裏插入圖片描述
當然這裏actuator/health路徑可以改爲其它的,只要與配置文件對應起來就可以了,最終用這種方案終於解決了我的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章