1. 程式人生 > >Zuul閘道器配置、ZuulException: Forwarding error

Zuul閘道器配置、ZuulException: Forwarding error

宣告,使用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


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  # 指定服務端的名稱

在這裡插入圖片描述
訪問結果如下:
在這裡插入圖片描述