• springcloud-zuul初级篇


    一 前言

    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-githubhttps://github.com/Netflix/zuul/wiki

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

    源码:

    请移步csdn知识追寻者spingcloud专栏说明或者公众号即可获得

  • 相关阅读:
    Python中的try...except...finally
    JavaScript 实现双向队列并用此来测试一个单词是否为回文
    js 触发 change 事件
    MySQL8 重置改root密码及开放远程访问
    根据数组下标在MongoDB中修改数组元素
    pymongo CursorNotFound错误
    mongodb根据子项中的指标查找最小或最大值
    正则文本过滤时的一些注意事项
    github page更新后不生效
    Xpath同时选取不同属性的元素
  • 原文地址:https://www.cnblogs.com/zszxz/p/12241088.html
Copyright © 2020-2023  润新知