• zuul配置文件详解


    路由是微服务架构中必须(integral )的一部分,比如,“/” 可能映射到你的WEB程序上,”/api/users “可能映射到你的用户服务上,“/api/shop”可能映射到你的商品服务商。(注解:我理解这里的这几个映射就是说通过Zuul这个网关把服务映射到不同的服务商去处理,从而变成了微服务!)

    Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器.

      Zuul功能:

    • 认证
    • 压力测试
    • 金丝雀测试
    • 动态路由
    • 负载削减
    • 安全
    • 静态响应处理
    • 主动/主动交换管理

    Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器, 支持基于Java和Groovy的构建。

    配置属性 zuul.max.host.connections 已经被两个新的配置属性替代, zuul.host.maxTotalConnections (总连接数)和 zuul.host.maxPerRouteConnections,(每个路由连接数) 默认值分别是200和20.

    一 . Zuul做反向代理

      当一个UI应用调用一个或更多的后端服务的时候,我们可以用Spring Cloud创建一个Zuul代理减少开发是非常常见的例子。使用代理服务来避免必须的跨域资源共享(Cross-Origin Resource Sharing)和所有的后端需要分别认证的问题。

      在Spring Boot主函数上通过注解 @EnableZuulProxy 来开启, 这样可以让本地的请求转发到适当的服务. 按照约定, 一个ID为"users"的服务会收到 /users 请求路径的代理请求(前缀会被剥离). Zuul使用Ribbon定位服务注册中的实例, 并且所有的请求都在hystrix的command中执行, 所以失败信息将会展现在Hystrix metrics中, 并且一旦断路器打开, 代理请求将不会尝试去链接服务.

      Zuul starter没有包含服务发现的客户端, 所以对于路由你需要在classpath中提供一个根据service IDs做服务发现的服务.(例如, eureka是一个不错的选择)

      在服务ID表达式列表中设置 zuul.ignored-services, 可以忽略已经添加的服务. 如果一个服务匹配表达式, 则将会被忽略, 但是对于明确配置在路由匹配中的, 将不会被忽略, 例如:

     application.yml

     zuul:

      ignoredServices: '*'

      routes:
        users: /myusers/**
    在这个例子中, 除了"users", 其他所有服务都被忽略了.这个意味着http请求"/myusers"将被转发到"users"服务(比如 "/myusers/101" 将跳转到 "/101")
    为了更细致的控制一个路由, 你可以直接配置路径和服务ID:
    zuul:

    routes:
        users:
          path: /myusers/**
          serviceId: users_service
    这个意味着 HTTP 调用"/myusers"被转发到"users_service"服务. 路由必须配置一个可以被指定为ant风格表达式的"path", 所以“/myusers/*”只能匹配一个层级,
    但"/myusers/**"可以匹配多级.

    后端的配置既可以是"serviceId"(对于服务发现中的服务而言), 也可以是"url"(对于物理地址), 例如:
    zuul:
      routes:
        users:
          path: /myusers/**
          url: http://example.com/users_service
    这个简单的"url-routes"不会按照 HystrixCommand 执行, 也无法通过Ribbon负载均衡多个URLs. 为了实现这一指定服务路由和配置Ribbon客户端(这个必须在
    Ribbon中禁用Eureka: 具体参考更多信息), 例如:
    zuul:
      routes:
        users:
          path: /myusers/**
          serviceId: users
    
    ribbon:
      eureka:
        enabled: false
    
    users:
      ribbon:
        listOfServers: example.com,google.com             //所使用的Ribbon列表
    你可以使用regexmapper提供serviceId和routes之间的绑定. 它使用正则表达式组来从serviceId提取变量, 然后注入到路由表达式中.
    ApplicationConfiguration.java
    @Bean
    public PatternServiceRouteMapper serviceRouteMapper() {
        return new PatternServiceRouteMapper(
            "(?<name>^.+)-(?<version>v.+$)",
            "${version}/${name}");
    }
    这个意思是说"myusers-v1"将会匹配路由"/v1/myusers/**". 任何正则表达式都可以, 但是所有组必须存在于servicePattern和routePattern之中. 
    如果servicePattern不匹配服务ID,则使用默认行为. 在上面例子中,一个服务ID为“myusers”将被映射到路径“/ myusers/**”(没有版本被检测到)
    ,这个功能默认是关闭的,并且仅适用于服务注册的服务。

    设置 zuul.prefix 可以为所有的匹配增加前缀, 例如 /api,代理前缀默认会从请求路径中移除(通过 zuul.stripPrefix=false 可以关闭这个功能).
    1. #反响代理配置  
    2. #这里的配置类似nginx的反响代理  
    3. #当请求/api/**会直接交给listOfServers配置的服务器处理  
    4. #当stripPrefix=true的时候 (http://127.0.0.1:8181/api/user/list -> http://192.168.1.100:8080/user/list)  
    5. #当stripPrefix=false的时候(http://127.0.0.1:8181/api/user/list -> http://192.168.1.100:8080/api/user/list)  
    6. zuul.routes.api.path=/api/**  
    7. zuul.routes.api.stripPrefix=false  
    8. api.ribbon.listOfServers=192.168.1.100:8080,192.168.1.101:8080,192.168.1.102:8080

    你也可以在指定服务中关闭这个功能:

     zuul:
      routes:
        users:
          path: /myusers/**
          stripPrefix: false
    在这个例子中, 请求"/myusers/101"将被跳转到"users"服务的"/myusers/101"上.

      zuul.routes的键值队实际上绑定到类型为 ZuulProperties 的对象上. 如果你查看这个对象你会发现一个叫"retryable"的字段, 设置为"true"会
    使Ribbon
    客户端自动在失败时重试(如果你需要修改重试参数, 直接使用Ribbon客户端的配置)
      X-Forwarded-Host 请求头默认在跳转时添加. 通过设置 zuul.addProxyHeaders = false 关闭它. 前缀路径默认剥离, 并且对于后端的请求通过请
    求头"X-Forwarded-Prefix"获取(上面的例子中是"/myusers")
      通过 @EnableZuulProxy 应用程序可以作为一个独立的服务, 如果你想设置一个默认路由("/"), 比如 zuul.route.home: /将路由所有的请求(例如: "/**")
    到"home"服务.
  • 相关阅读:
    Kafka开启JMX监控
    不用再上官网,自己部署一套ElementUI官方最新文档
    Idea没安装几款好用的插件,怎么风骚的写代码???
    springboot2.x基础教程:动手制作一个starter包
    springboot2.x基础教程:自动装配原理与条件注解
    Java Jar源码反编译工具那家强
    Jmeter 乱码解决方法
    robot frame基础知识--变量
    HTML基础--标签
    yaml模块
  • 原文地址:https://www.cnblogs.com/sstone/p/7283480.html
Copyright © 2020-2023  润新知