天天看點

spring cloud之Zuul路由網關(六)

目錄

Zuul概述:是什麼

路由基本配置

路由通路映射規則

spring cloud之Zuul路由網關(六)

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修改

spring cloud之Zuul路由網關(六)
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

一個路由

測試 結果

spring cloud之Zuul路由網關(六)

不用路由: http://localhost:8001/dept/getById/2

測試結果

spring cloud之Zuul路由網關(六)

啟用路由: http://myzuul.com:9527/springcloud-model-dept/dept/getById/2

                                   路由網關      真實的微服務位址      result風格查詢     

測試結果

spring cloud之Zuul路由網關(六)

路由通路映射規則

工程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

spring cloud之Zuul路由網關(六)

此時遇到的問題: 兩個通路路徑都能成功通路到

       解決方案:如下

原真實服務名忽略

單個忽略使用

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/**   #做映射
           

測試結果:

spring cloud之Zuul路由網關(六)
spring cloud之Zuul路由網關(六)

設定統一公共字首

zuul: 
  prefix: /jiangjy    #字首名稱
  #ignored-services: springcloud-model-dept  #忽略原真實名(單個) 
  ignored-services: "*"  #忽略原真實名(多個)
  routes: 
    mydept.serviceId: springcloud-model-dept  #将真實的名
    mydept.path: /mydept/**   #做映射
           

測試結果:

spring cloud之Zuul路由網關(六)

總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/**   #做映射         
           

繼續閱讀