Zuul閘道器配置、ZuulException: Forwarding error
阿新 • • 發佈:2018-11-30
宣告,使用JDK8、springcloud2.01 、maven3.5.4、idea
Zuul 是什麼,有什麼作用:
核心作用就是過濾和路由;
》
1、基本配置如下:
1.1、新增Zuul 以及Eureka 依賴;
<!-- 閘道器依賴-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</ dependency>
</dependencies>
1.2、yml 檔案、Zuul 路由規則配置:
由於存在Eureka 客戶端,所以直接指定服務端的名字即可;
後面還有更簡化的配置;
server:
port: 10010 #埠
spring:
application:
name: api-gateway # 閘道器名字
zuul:
routes:
user-service: # 路由的 id
path: /user-service/** #對映路徑
# url: http://127.0.0.1:8081 #對映路徑對應的實際的url地址
# 訪問路徑規則 新增 對映路徑的規則
serviceId: user-service # 指定服務端的名稱
簡化配置:直接指定服務端的 ID 指向 對映路徑 path
zuul.routes..path=/xxx/**: 來指定對映路徑。是自定義的路由名
zuul.routes..serviceId=/user-service:來指定服務名。
簡化配置:
zuul.routes.=即簡化成如下配置:
zuul:
routes:
user-service: /user-service/** # 這裡是對映路徑
預設配置: Zuul 預設配置規則就是服務path 對應就是服務ID ,意思就是不配置Zuul 也是OK的。
忽略配置:
想要禁用某一個路由規則 採用如下配置:
zuul:
ignored-services:
- user-service
- consumer
1.3、配置好Zuul ,
訪問代理 http://localhost:10010/user-service/user/2
出現500報錯,報錯如下:
com.netflix.zuul.exception.ZuulException: Forwarding error
、、省略
Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: path
異常原因如下圖:
明顯路徑對映不對,仔細檢視發現yml 檔案中path 、url 和user-service 在同一級路徑了,都是坑;
修改如下圖,恢復正常訪問;
1、新增字首: /api
使用 zuul.prefix : /api 的語法,yml具體配置如下:
訪問:http://localhost:10010/api/user-service/user/2
zuul:
prefix: /api # 新增路由字首
routes:
user-service: # 路由的 id
path: /user-service/** #對映路徑
# url: http://127.0.0.1:8081 #對映路徑對應的實際的url地址
# 訪問路徑規則 新增 對映路徑的規則
serviceId: user-service # 指定服務端的名稱
訪問結果如下: