1. 程式人生 > >zuul:(一)SpringCloud的閘道器介紹和zuul閘道器的使用

zuul:(一)SpringCloud的閘道器介紹和zuul閘道器的使用

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;
import
org.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
閘道器訪問無效

 

 

.

 

  

  :