日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

服务注册发现consul之五:Consul移除失效服务的正确姿势

發布時間:2025/3/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务注册发现consul之五:Consul移除失效服务的正确姿势 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring cloud微服務不定期會出現網絡請求失敗的錯誤。于是看了下后臺日志,發現有幾個請求會報如下的異常:

Caused by: feign.RetryableException: Connection refused (Connection refused) executing POST http://oauth/oauth/token******at feign.FeignException.errorExecuting(FeignException.java:67)at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)... 26 more

(調用流程是user服務調用oauth服務)
一開始很奇怪,為什么有的請求可以成功,有的不可以。因為服務編排用的是Docker Compose,所以第一反應是編排服務的時候,oauth的hosts忘加了(后來才想起來請求用的是Feign,根本不需要管hosts,RestTemplate才需要,mdzz)。在docker-compose.yml里加上以后,并沒有卵用。
然后到Consul上看了一下,oauth服務確實是在線的。(不過后面的passing數量不是2,是6,這里因為已經移除了失效的,所以只剩下2個)

然后就開始懷疑人生了,為什么服務在線卻訪問不到呢,用Eureka的時候才出現過這個問題,難道Consul也有?那我辛辛苦苦切換過來還有什么意義!然后我就盯著那個數字6看,產生了一個疑問:哪里來的6個oauth實例?這個時候才想到,可能是Feign負載均衡拿到了“假”的oauth實例,所以才請求失敗。點開Consul的Node列表看了一下,發現有6個oauth躺在那里,然而只有2個是可用的。

不應該啊,Consul不應該把無效的服務注銷掉嗎?

這是因為:當在Spring Cloud應用中使用Consul來實現服務治理時,由于Consul不會自動將不可用的服務實例注銷掉(deregister),這使得在實際使用過程中,可能因為一些操作失誤、環境變更等原因讓Consul中存在一些無效實例信息,而這些實例在Consul中會長期存在,并處于斷開狀態。它們雖然不會影響到正常的服務消費過程,但是它們會干擾我們的監控,所以我們可以實現一個清理接口,在確認故障實例可以清理的時候進行調用來將這些無效信息清理掉。

在consul的官網上:https://www.consul.io/api/agent/service.html (果然遇到問題就應該先去找官方文檔啊!)

解決辦法:調用deregister接口

用PUT請求Consul 的這個deregister接口,附上實例的id就可以成功注銷掉實例了(注意是實例的id,不是服務名,即服務名+一段唯一字符串。有ACL認證的Consul需要在Header上加token,否則會報permission denied)如下圖:

?

示例:put方式訪問http://1XX.XX.xx.250:8500/v1/agent/service/deregister/trade-1xx-xx-206-101-18090

接著看到這個服務的實例數量……難道要一個一個請求嗎?

當然不是,配合下面這個實例列表接口,批量刪除吧!

示例:查看list service如下:http://1XX.XX.XX.250:8500/v1/agent/services 上面是列出所有的service。 可以用下面的 http://172.29.206.250:8500/v1/health/state/critical,返回的json中都是失敗的service,再刪除它。

總結

以上是生活随笔為你收集整理的服务注册发现consul之五:Consul移除失效服务的正确姿势的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。