zuul:(一)SpringCloud的閘道器介紹和zuul閘道器的使用
阿新 • • 發佈:2018-11-05
1)什麼是閘道器?
API Gateway,是系統的唯一對外的入口,介於客戶端和伺服器端之間的中間層,處理非業務功能 提供路由請求、鑑權、監控、快取、限流等功能
統一接入
智慧路由
AB測試、灰度測試
負載均衡、容災處理
日誌埋點(類似Nignx日誌)
流量監控
限流處理
服務降級
安全防護
鑑權處理
監控
機器網路隔離
2)主流的閘道器
zuul:是Netflix開源的微服務閘道器,和Eureka,Ribbon,Hystrix等元件配合使用,Zuul 2.0比1.0的效能提高很多
kong: 由Mashape公司開源的,基於Nginx的API gateway
nginx+lua:是一個高效能的HTTP和反向代理伺服器,lua是指令碼語言,讓Nginx執行Lua指令碼,並且高併發、非阻塞的處理各種請求
3)zuul閘道器的使用:
1.idea建立工程,閘道器要單獨一個工程:需要的依賴:
------------ --------------------- --------------------- ----------------- -----------------
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
2.啟動類加入註解 @EnableZuulProxy
預設整合斷路器 @EnableCircuitBreaker無需新增
package net.xdclass.apigataway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class ApiGatawayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatawayApplication.class, args); } }
3.yml配置檔案設定:
server: port: 9000 #服務的名稱 spring: application: name: api-gateway #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
4.訪問規則如:
1.原本呼叫訂單中心order-server的api:save http://localhost:8781/api/v1/order/save?user_id=1&product_id=1 閘道器訪問: http://localhost:9000/order-server/api/v1/order/save?user_id=1&product_id=1 2.原本產品中心product-server的api:list http://localhost:8771/api/v1/product/list 閘道器訪問: http://localhost:9000/product-server/api/v1/product/list 規則:http://gateway:port/service-id/** service-id:註冊中心的服務名稱
配置方式:
5.自定義路由轉發配置,如:
server: port: 9000 #服務的名稱 spring: application: name: api-gateway #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ #自定義路由對映 zuul: routes: order-service: /apigateway/**
閘道器訪問: http://localhost:9000/apigateway/api/v1/order/save?user_id=1&product_id=1
也可以order-server代替apigateway訪問
6.環境隔離配置:如
server: port: 9000 #服務的名稱 spring: application: name: api-gateway #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ #自定義路由對映 zuul: routes: order-service: /apigateway/** product-service: /apigateway/** #統一入口為上面的配置,其他入口忽略 ignored-patterns: /*-service/**
閘道器訪問: http://localhost:9000/apigateway/api/v1/order/save?user_id=1&product_id=1 ignored:不可以order-server代替apigateway訪問
7.忽略整個服務配置,不對外提供介面: ignored-services: product-service
server: port: 9000 #服務的名稱 spring: application: name: api-gateway #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ #/order-service/api/v1/order/save?user_id=2&product_id=1 #自定義路由對映 zuul: routes: order-service: /apigateway/** product-service: /apigateway/** #統一入口為上面的配置,其他入口忽略 ignored-patterns: /*-service/** #忽略整個服務,對外提供介面 ignored-services: product-service
閘道器訪問無效
.
: