1. 程式人生 > >Spring Cloud zuul閘道器服務 一

Spring Cloud zuul閘道器服務 一

上一篇進行Netflix Zuul 1.0 與 gateway的對比。今天來介紹一下 zuul的搭建及應用

Zuul 工程建立

工程建立 cloud-gateway-zuul。還是基於之前的工程
pom檔案匯入

 <parent>
        <artifactId>spring-cloud-alibaba-basis</artifactId>
        <groupId>com.xian.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-gateway-zuul</artifactId>
    <name>閘道器服務zuul</name>

    <dependencies>
        <!-- 註冊中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- fengin 支援 -->
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- zuul -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
    </dependencies>

建立GatewayZuulApplication啟動類

package com.xian.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * <Description>
 *
 * @author [email protected]
 * @version 1.0
 * @createDate 2019/10/29 10:52
 */
@EnableZuulProxy
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayZuulApplication.class,args);
    }
}

建立 bootstrap.yml

````
spring:
profiles:
active: dev
application:
name: gateway-zuul-server
cloud:
nacos:
config:
server-addr: 47.99.209.72:8848
file-extension: yaml

zuul:
host:
# 目標主機的最大連線數,預設值為200
max-total-connections: 1000
# 每個主機的初始連線數,預設值為20
max-per-route-connections: 200
routes:
discovery-server:
path: /server/
serviceId: cloud-discovery-server
client-common:
path: /client/
serviceId: cloud-discovery-client
sensitiveHeaders: X-ABC,Authorization
# 所有路由的預設Hystrix隔離模式(ExecutionIsolationStrategy)為SEMAPHORE。如果此隔離模式是首選,則zuul.ribbonIsolationStrategy可以更改為THREAD
ribbon-isolation-strategy: thread
# 這個屬性意思,指定忽略的服務列表 * 代表忽略所有服務
ignored-services: '*'
# 欄位比較敏感,不希望傳遞給下游微服務。 設定空沒有要忽略的敏感欄位。全部傳給下游服務
sensitive-headers: X-ABC
ribbon:
eager-load:
# 強制載入,不設定會進行懶載入。spring 第一次請求會非常慢
enabled: true
```

引數

  • zuul.host.max-total-connections 目標主機的最大連線數。
  • zuul.host.max-per-route-connections 每個主機的初始連線數。

這個倆個引數是zuul的優化後的屬性值,如果想有適合的配置,還需要根據業務情況而定

因為我們有倆個業務服務 一個服務提供者 一個是服務消費者我們配置倆個服務的分別路由 discovery-server、client-common

  • path 是請求路徑匹配規則
  • serviceId 是我們服務的spring.application.name 對應的值。
  • sensitiveHeaders 欄位比較敏感,不希望傳遞給下游微服務。 設定空沒有要忽略的敏感欄位。全部傳給下游服務這個欄位可以是全域性設定也可以是單個服務配置。
  • ribbon-isolation-strategy 所有路由的預設Hystrix隔離模式(ExecutionIsolationStrategy)為SEMAPHORE。如果此隔離模式是首選,則zuul.ribbonIsolationStrategy可以更改為THREAD
  • ignored-services 忽略所有微服務,只路由指定的微服務。
  • ribbon.eager-load.enabled true 強制載入 false 預設懶載入
    • true日誌列印效果 false 將不列印這段日誌

      2019-10-29 23:47:11.377  INFO 61396 --- [           main] c.netflix.loadbalancer.BaseLoadBalancer  : Client: cloud-discovery-server instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=cloud-discovery-server,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
      2019-10-29 23:47:11.382  INFO 61396 --- [           main] c.n.l.DynamicServerListLoadBalancer      : Using serverListUpdater PollingServerListUpdater
      2019-10-29 23:47:11.450  INFO 61396 --- [           main] c.netflix.config.ChainedDynamicProperty  : Flipping property: cloud-discovery-server.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
      2019-10-29 23:47:11.452  INFO 61396 --- [           main] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client cloud-discovery-server initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=cloud-discovery-server,current list of Servers=[192.168.3.6:9012],Load balancer stats=Zone stats: {unknown=[Zone:unknown;  Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
      },Server stats: [[Server:192.168.3.6:9012;  Zone:UNKNOWN;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
      ]}ServerList:com.alibaba.cloud.nacos.ribbon.NacosServerList@33e4b9c4
      2019-10-29 23:47:11.576  INFO 61396 --- [           main] c.netflix.config.ChainedDynamicProperty  : Flipping property: cloud-discovery-client.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
      2019-10-29 23:47:11.577  INFO 61396 --- [           main] c.netflix.loadbalancer.BaseLoadBalancer  : Client: cloud-discovery-client instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=cloud-discovery-client,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
      2019-10-29 23:47:11.578  INFO 61396 --- [           main] c.n.l.DynamicServerListLoadBalancer      : Using serverListUpdater PollingServerListUpdater
      2019-10-29 23:47:11.639  INFO 61396 --- [           main] c.netflix.config.ChainedDynamicProperty  : Flipping property: cloud-discovery-client.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
      2019-10-29 23:47:11.640  INFO 61396 --- [           main] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client cloud-discovery-client initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=cloud-discovery-client,current list of Servers=[192.168.3.6:9011],Load balancer stats=Zone stats: {unknown=[Zone:unknown;  Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
      },Server stats: [[Server:192.168.3.6:9011;  Zone:UNKNOWN;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
      ]}ServerList:com.alibaba.cloud.nacos.ribbon.NacosServerList@256589a1

將三個服務全部啟動。服務提供者和服務消費者還有zuul 服務
在控制檯 輸入命令 curl http://localhost:9083/client/client/test

我們看到列印效果,請求通過閘道器服務成功轉發到了我們的下游服務上。並返回

  • ribbon-isolation-strategy
  • ignored-services
  • sensitiveHeaders

以上幾個引數、還有zuul服務的路由攔截器的使用,將在下一篇講解。

如何喜歡可以關注分享本公眾號。

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。轉載請附帶公眾號二維