Spring Cloud Gateway+Nacos出現服務亂串的問題記錄


一、問題介紹

這兩天在做服務遷移,替換原有的網關和consul注冊中心。改造成spring cloud gateway + nacos的架構組合。原本驗證沒發現什么問題,但是發布生產環境后,發現有服務亂串的現象。大概過程如下:

> curl -X GET http://gateway/service-A/api/v1/test
> service-A success
> curl -X GET http://gateway/service-B/admin/api/v1/test
> service-B success
> curl -X GET http://gateway/service-B/api/v1/test
> service-A success
> curl -X GET http://gateway/service-A/api/v1/test
> service-B 404 fail
> curl -X GET http://gateway/service-B/admin/api/v1/test
> service-A 404 fail

大致上來講就是服務完全亂掉了,從表現上看客戶端的loadbalancer無法正確命中。后來翻看網上資料,找到了唯一一篇講這個問題的文章,簡單的說了下需要移除rabbion的負載均衡器。結合着零散的資料,自己又在本地做了一些測試,最終解決了問題。
核心方案(替換LoadBalancerClient):用 spring-cloud-starter-loadbalancer 替換 spring-cloud-starter-netflix-ribbon

二、個人項目組件依賴

gateway使用spring-cloud-starter-netflix-ribbon 做負載均衡有問題,估計也有版本不匹配的問題。我這里沒有深究如何去匹配合適的版本,羅列個人的jar包依賴情況如下

組件 版本
spring-boot 2.1.8.RELEASE
spring-cloud-gateway-starter 2.1.5.RELEASE
spring-cloud-starter-netflix-ribbon 2.2.2.RELEASE 替換前
spring-cloud-starter-loadbalancer 2.2.2.RELEASE 替換后

三、簡單的排查

本地調試了一下ribbon的負載均衡,發現按照上述的測試。一旦請求報錯,ribbon創建負載均衡器就會錯亂。本來請求service-A,結果給我返回service-B的loadbalancer。源碼邏輯比較復雜,沒有深究。

四、解決問題

4.1、排除掉rabbion的相關依賴

4.2、依賴spring-cloud-starter-loadbalancer

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM