zuul初级篇(10)

x33g5p2x  于2021-08-23 转载在 Spring  
字(4.3k)|赞(0)|评价(0)|浏览(165)

一 前言

zuul路由网关的核心作用是用于后台服务的统一管理;由于微服务是部署在多台服务器上,服务器的ip地址并不能统一,我们需要暴露一个统一的ip地址给前台使用进行接口调用;zuul就是起到路由网关统一作用;再看下Netflix uses Zuul 对zuul使用如下:

  1. Authentication :权限认真
  2. Insights:视野监控
  3. Stress Testing:压力测试
  4. Canary Testing:金丝雀测试
  5. Dynamic Routing:动态路由
  6. Service Migration:服务迁移
  7. Load Shedding:负载均衡削减
  8. Security:安全认证
  9. Static Response handling:静态响应处理
  10. Active/Active traffic management:主动流量管理

本篇文章是初级入门篇,需要一定的前置知识;如果是初学者请移步知识追寻者的springcloud专栏进行系统学习;

二 zuul-client

2.1 pom.xml

创建新工程zuul-client ;spring-cloud-starter-netflix-eureka-client 依赖用于服务注册与发现;

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

2.2 表现层

表现层提供一个测试接口用于zuul-server服务进行统一路由管理;

/**
 * @Author lsc
 * <p>zuul 路由网关测试表现层 </p>
 */
@RestController
public class ZuulController {

    @RequestMapping("/zszxz")
    public String getUser(String username){
        return "hello"+username;
    }
}

2.3 application.yml

  1. 指定端口8101
  2. 暴露服务名称zuul-client
  3. eureka服务注册
server:
  port: 8101

spring:
  application:
    name: zuul-client # 应用名称

eureka:
  client:
    service-url:
      # 服务注册地址
      defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
  instance:
    prefer-ip-address: true

2.4启动类

@EnableDiscoveryClient 用于开启eureka注册与发现

/**
 * @Author lsc
 * <p> zuul-client启动类</p>
 */
@SpringBootApplication
@EnableDiscoveryClient//开启eureka注册与发现
public class ZuulApp {

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

三 zuul-server

3.1 pom.xml

创建zuul-server工程,引入eureka,zuul依赖;

    <dependencies>
        <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>
    </dependencies>

3.2 application.yml

  1. 指定端口8100
  2. 指定应用名称zuul-server
  3. eureka服务注册与发现
  4. zuul 路由规则设置,zuul-client 服务 /** 统一由zuul路由管理为 /api/**
server:
  port: 8100

spring:
  application:
    name: zuul-server # 应用名称

eureka:
  client:
    service-url:
      # 服务注册地址
      defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
  instance:
    prefer-ip-address: true

zuul:
  routes:
    # zuul-client 路由规则
    zuul-client:
      path: /api/** # 转发路径
      serviceId: zuul-client # 服务id

3.3 启动类

@EnableZuulProxy 开启内嵌路由代理;

/**
 * @Author lsc
 * <p>zuul-server </p>
 */
@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApp {

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

四 结果测试

4.1 启动工程列表

  1. 分别启动三个eureka-server(1-3), 端口为10081,10082,10083
  2. 启动zuul-client
  3. 启动zuul-server

4.1 访问zuul-client

访问 http://localhost:8101/zszxz?username=zszxz 即正常接口测试

4.2 访问zuul-server

访问 http://localhost:8100/api/zszxz?username=zszxz 网关路由测试

得出结论 zuul-client 服务 /** 所有的路径都会映射zuul-server服务 /api/** 路径;

五 zuul通用配置

5.1 路由简化配置

路由简化配置需要严格的按照服务id对应路由名称进行配置;

原来的路由规则

zuul:
  routes:
    # zuul-client 路由规则
    zuul-client:
      path: /api/** # 转发路径
      serviceId: zuul-client # 服务id

简化的路由规则如下,

zuul:
  routes:
    zuul-client: /api/**

5.2 排除路由配置

在日常开发中难免有些内部服务是不提供给外部访问,而是服务端内部之间调用此时就可以使用路由配置进行排除配置;如下配置中会排除所有的服务,除了zuul-client; 当然 读者也可以不用通配符 * ,而是使用具体的服务id;

zuul:
  ignoredServices: '*'
  routes:
    zuul-client: /api/**

5.3 路由配置使用具体ip地址

除了可以使用服务id进行路由配置,还可以使用ip地址进行配置,不过通常不会使用这个选项;

zuul:
  routes:
    zuul-client:
      path: /api/**
      url: http://127.0.0.1:8101

5.4 zuul使用ribbon负载均衡

zuul通常使用的是简单eureka自带的负载均衡,现在想要使用ribbon的负载均衡,并且支持HystrixCommand 则需要进行如下配置

zuul:
  routes:
    zuul-client:
      path: /api/**
      serviceId: zuul-client
      stripPrefix: true #开启前缀

hystrix:
  command:
    zuul-client:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10000

zuul-client:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    listOfServers: http://127.0.0.1:8101,http://127.0.0.1:8102
    ConnectTimeout: 1000
    ReadTimeout: 3000
    MaxTotalHttpConnections: 500
    MaxConnectionsPerHost: 100

5.5 排除路径路由配置

5.2节中可以进行排除服务路由,此节还可以排除特定模式的路径接口;如下配置中将会排除zuul-client所有路径中含有admin 路径的接口;

zuul:
  ignoredPatterns: /**/admin/**
  routes:
    zuul-client: /api/**

5.6 多路由配置

之前的配置都是一个服务id配置,如果多个服务进行配置示例如下;具体的服务id和路径由读者自定义;

zuul:
  routes:
    zuul-client1:
      path: /api/1/**
    zuul-client2:
      path: /api/2**

5.7 排除头信息

如下配置中会排除请求头中的敏感信息,是个不错的选择;

zuul:
  routes:
    zuul-client:
      path: /api/**
      sensitiveHeaders: Cookie,Set-Cookie,Authorization
      url: http://127.0.0.1:8101

六参考文档

参考文档

zuul-github:https://github.com/Netflix/zuul/wiki

springcloud官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html

源码:

请移步知识追寻者spingcloud专栏说明即可获得

相关文章