目錄
Zuul概述:是什麼
路由基本配置
路由通路映射規則
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPj1mY2x2MihGbtFmb1cVWwBnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1gjMxMzMwETM4ADMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Zuul概述:是什麼
Zuul包含了對請求的路由和過濾兩個最主要的功能:
其中路由功能負責将外部請求轉發到具體的微服務執行個體上,是實作外部通路統一入口的基礎而過濾器功能則負責對請求的處理過程進行幹預,是實作請求校驗、服務聚合等功能的基礎.
Zuul和Eureka進行整合,将Zuul自身注冊為Eureka服務治理下的應用,同時從Eureka中獲得其他微服務的消息,也即以後的通路微服務都是通過Zuul跳轉後獲得。
注意:Zuul服務最終還是會注冊進Eureka
提供=代理+路由+過濾三大功能
能幹嘛:路由+過濾
官網資料:https://github.com/Netflix/zuul/wiki/Getting-Started
路由基本配置
建立Module子產品springcloud-model-zuul-gateway-9527
pom.xml檔案配置 約定
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jiangjy.springcloud</groupId>
<artifactId>springcloud-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-model-zuul-gateway-9527</artifactId>
<dependencies>
<!-- zuul路由網關 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- actuator監控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- hystrix容錯-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- 日常标配 -->
<dependency>
<groupId>com.jiangjy.springcloud</groupId>
<artifactId>springcloud-model-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 内嵌的伺服器容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 修改後立即生效,熱部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
yml.xml 檔案配置
server:
port: 9527
spring:
application:
name: springcloud-model-zuul-gateway
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
instance:
instance-id: gateway-9527.com
prefer-ip-address: true
hosts修改
127.0.0.1 myzuul.com
主啟動類
package com.jiangjy.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class Zuul_9527_StartSpringCloudApp {
public static void main(String[] args) {
SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
}
}
啟動
三個eureka叢集
一個服務提供類springcloud-model-provider-dept-8001
一個路由
測試 結果
不用路由: http://localhost:8001/dept/getById/2
測試結果
啟用路由: http://myzuul.com:9527/springcloud-model-dept/dept/getById/2
路由網關 真實的微服務位址 result風格查詢
測試結果
路由通路映射規則
工程springcloud-model-zuul-gateway-9527
代理名稱
yml.xml檔案配置 添加
映射前: http://myzuul.com:9527/springcloud-model-dept/dept/getById/2
zuul:
routes:
mydept.serviceId: springcloud-model-dept #将真實的名
mydept.path: /mydept/** #做映射
映射後:http://myzuul.com:9527/mydept/dept/getById/2
此時遇到的問題: 兩個通路路徑都能成功通路到
解決方案:如下
原真實服務名忽略
單個忽略使用
zuul:
ignored-services: springcloud-model-dept #忽略原真實名(單個)
routes:
mydept.serviceId: springcloud-model-dept #将真實的名
mydept.path: /mydept/** #做映射
多個忽略使用
zuul:
ignored-services: "*" #忽略原真實名(多個)
routes:
mydept.serviceId: springcloud-model-dept #将真實的名
mydept.path: /mydept/** #做映射
測試結果:
設定統一公共字首
zuul:
prefix: /jiangjy #字首名稱
#ignored-services: springcloud-model-dept #忽略原真實名(單個)
ignored-services: "*" #忽略原真實名(多個)
routes:
mydept.serviceId: springcloud-model-dept #将真實的名
mydept.path: /mydept/** #做映射
測試結果:
總yml.xml檔案配置
server:
port: 9527
spring:
application:
name: springcloud-model-zuul-gateway
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
instance:
instance-id: gateway-9527.com
prefer-ip-address: true
zuul:
prefix: /jiangjy #字首名稱
#ignored-services: springcloud-model-dept #忽略原真實名(單個)
ignored-services: "*" #忽略原真實名(多個)
routes:
mydept.serviceId: springcloud-model-dept #将真實的名
mydept.path: /mydept/** #做映射