1.SpringCloudZuul是基於Netflix Zuul實現的API網關組件,它實現了請求路由、負載均衡、校驗過濾、與服務治理框架的結合、請求轉發是的熔斷機制和服務的聚合等功能web
2.引入依賴spring
<dependencies>api
<dependency>架構
<groupId>org.springframework.boot</groupId>app
<artifactId>spring-boot-starter-web</artifactId>負載均衡
</dependency>框架
<dependency>spring-boot
<groupId>org.springframework.cloud</groupId>post
<artifactId>spring-cloud-starter-zuul</artifactId>url
<version>1.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.3.2.RELEASE</version>
</dependency>
</dependencies>
3.在主類上使用@EnableZuulProxy註解開啓API網關服務功能
@SpringBootApplication
//開啓網關路由
@EnableZuulProxy
@EnableEurekaClient
public class SpringzuulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringzuulApplication.class, args);
}
}
4.再配置文件上面配置一些路由信息
spring:
application:
name: zuul-client
server:
port: 8001
zuul:
routes:
# 面向服務的路由
api-a:
path: /api-a/**
serviceId: one-client
# 傳統的路由
api-b-url:
path: /api-b-url/**
url: http://localhost:8011/
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka/
主要的配置解析:本配置配置了兩種的策略使用兩種路由規則的配置方法,一種是面向服務的,一種是使用傳統的url。全部符合/api-a/**的請求都將轉發到one-client,一樣全部符合/api-b-url/**的請求都將轉發到http://localhost:8011/,也是one-client的地址。兩種規則的配置很明顯:面向服務的使用serviceId配置服務實例,而傳統的直接使用服務的地址。
其餘配置
zuul.ignored-services=hello-service:忽略掉一個服務;
zuul.ignored-patterns=/**/feign/**: 忽略/feign接口路由;
zuul.prefix:爲路由添加統一前綴;
zuul.add-host-header: true:在請求路由轉發前爲請求設置Host頭信息;
zuul.sensitiveHeaders=:設置全局參數爲空來覆蓋默認敏感頭信息
zuul.routes.<route>.customSensitiveHeaders=true:對指定路由開啓自定義敏感頭
zuul.routes.<route>.sentiviteHeaders=:將指定路由的敏感頭設置爲空。
zuul.retryable=false:關閉重試機制
zuul.routes.<route>.retryable=false:指定路由關閉重試機制
zuul.<SimpleClassName>.<fileterType>.disable=true:禁用指定的過濾器,<SimpleClassName>表明過濾器的類名,<fileterType>表明過濾器的類型。
在Zuul中Hystrix和Ribbon的配置與傳統的Hystrix和Ribbon服務的配置同樣。
4.請求的結果
5.數據的過濾
在單體架構的時候咱們一般會使用攔截器或過濾器對請求進行權限的校驗,一樣在SpringCloudZuul中也提供了過濾器來進行請求的過濾與攔截,實現方法只要咱們繼承抽象類ZuulFilter並實現它定義的4個抽象方法
public class AccessFilter extends ZuulFilter {
1. filterType:過濾器類型,他決定過濾器在請求的哪一個生命週期執行。在Zuul中有四種不一樣的生命週期過濾器
pre:能夠在請求被路由以前調用;
routing:在路由請求是調用;
post:在routing和error過濾器以後被調用;
error:處理請求是發生錯誤是被調用
2. filterOrder:過濾器的執行順序,數值越小優先級越高
3. shouldFilter:判斷過濾器是否須要執行
4. run: 過濾器的具體邏輯。上面的run方法中判斷請求是否帶有accessToken參數,若是沒有則是非法請求,使用 currentContext.setSendZuulResponse(false);表示該請求不進行路由。而後設置響應碼。