zoukankan      html  css  js  c++  java
  • 17.Spring-Cloud-Zuul之服务路由配置

    服务路由配置

         Spring Cloud Zuul通过与Spring Cloud Eureka的整合,实现了对服务实例的自动化维护.

        我们只需要zuul.routes.<route>.path与zuul.routes.<route>.serviceId参数对的方式进行配置

    如下:
         /order-service/**规则请求路径转发到名为order-service的服务实例上去的路由规则。其中<route>可以指定任意的路由名称
    zuul.routes.order-service.path=/order-service /**
    zuul.routes.order-service.serviceId=order-service   

     除了上面的配置,还有一种更加简洁的配置方式为 

     zuul.routes.<serviceId>=path

     zuul.routes.order-service=/order-server/**

    关于:/order-server/** 这种为路径匹配

    URL路径 说明
    /order-service   /? 匹配/order-server/之后拼接一个任务字符串的路径,如/order-service   /a,/order-service   /b,/order-service   /c,
    /order-service   /*  匹配/order-server/之后拼接任意字符的路径,如/order-service   /a,如/order-service   /aa,如/order-service /aaa,但是无 法匹配/order-service /aa/bb这样的路径
    /order-service   /**  匹配/order-service /*包含的内容之外,还是可以匹配形容/order-service /aa/bb这样的路径

    服务路由的默认规则

       Spring Cloud Eureka与Spring Cloud Zuul的整合已经为我们省去了维护服务实例清单的大量配置,剩下只需要在维护请求路径的匹配表达式与服务名的映射关系。但是你会发现我们的配置规则几乎都会采用服务名作为外部请求的前缀,如下:

    zuul.routes.order-service.path=/order-service/**

    zuul.routes.order-service.serviceId=order-service   

    path的前缀使用了order-service,二对应的服务名称也是order-service。对于这种配置,zuul默认实现了这样的配置,当用Spring Cloud Zuul构建API网关并且整合Spring Cloud Eureka,它会为Eureka中的每个服务自动创建一个默认的路由规则,这些默认的规则的path会使用serviceId配置的服务名称作为请求前缀。

        由于默认的规则会为在Eureka上注册的服务,都会被zuul自动创建映射关系来进行路由,这样会使一些不对外开放的服务也可能被访问到。zuul提供了zuul.ignored-services参数来设置一个服务名匹配表达式来定义不自动创建路由的规则。那么zuul会跳过该服务,不为其创建路由规则。

    如:zuul.ignored-services=*,Zuul将对所有的服务都不会自动创建路由规则.这样我们需要手动添加那个服务想创建映射关系。

    自定义路由映射规则

    在实际开发中,可能会为每一个微服务起一个版本号为了迭代开发,如order-service-v1,userservice-v1,order-service-v2,userservice-v2,默认情况下,Zuul自动为服务创建的路由表达会采用服务名作为前缀,比如上面服务为产生的路由为order-service-v1/**,userservice-v1/**,这种不方便管理,我们可能希望产生这样的路由方式/v1/order-service/**,/v1/userservice/**.

    针对上面Zuul提供了自定义路由规则。

        /如果想将服务Id [rest-service-v1]映射到/v1/rest-service/**
       //那么路由服务id规则为(?<name>.*)-(?<version>v.*$)
       //请求路由为${version}/${name}

    public class Application {
    
    
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
        /**
         * http://localhost:8777/v1/feign-consumer/feign-consumer
         * @return
         */
    @Bean
    public PatternServiceRouteMapper serviceRouteMapper() {
    
                  //官方源码推荐的方式
    
    return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
    }
    }


    测试

    启动注册中心,服务提供者,服务消费者,api网关。

    输入:http://localhost:8777/v1/feign-consumer/feign-consumer

    当开发者在API网关中定义了PatternServiceRouteMapper实现之后,只要符合第一个餐宿定义规则的服务名,都会优先使用该实现构建出路径表达式,如果没有匹配上的服务则还是会使用默认的路由规则,从下面的控制台输出就可以看出来。

    控制台打印:

    忽略表达式(更加细粒度的路由配置)

    Zuul提供了一个忽略表达式参数zuul.ignored-patterns.该参数可以用来设置不希望被API网关进行路由的URL表达式。

       如:

    zuul.ignored-patterns=/**/getUserInfo/**

    zuul.routes.order-service.path=/order-service/**

    zuul.routes.order-service.serviceId=order-service   

    当通过http://localhost:8777/order-service/getUserInfo是不会被路由的,会报404.

    路由前缀

     为了方便全局地为路由规则增加前缀信息,Zuul提供了zuul.prefix参数来进行设置。

    
    #定义全局的api网关,路由规则前缀
    #这样之前的请求路径就变为 http://localhost:8777/api/v1/feign-consumer/feign-consumer
    #谨慎用低版本的有bug
    #zuul.prefix=/api
    
    #API网关路由转发请求hystrixCommand执行超时时间,默认为1000 即1s
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

     微信公众号

     

     

  • 相关阅读:
    python基础-->流程控制-->分支结构-->单项分支-->双向分支
    python 控制语句基础---->代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 | 作用域:作用的范围
    python基础语法
    Python Built-in Function 学习笔记
    身份证运算符 is 和 is not(检查两个数据在内存当中是否是同一个值) | 逻辑运算符 and or not | 数据类型的判断 isinstance
    算数运算符: +
    变量存储缓存机制 Number (int bool float complex)
    关于容器类型数据的强转一共:str() list() set() tuple() dict() 都可以转换成对应的数据类型 /Number 数据类型的强转一共: int() bool() flaot() complex() 都可以转换成对应的数据类型
    python 容器类型数据 (str list tuple set dict)
    Number 强制类型转换 int 强制转换整型 float 强制转换浮点型 complex 强制转换成复数 bool 强制转换成布尔类型,结果只有两种,要么True 要么 False """bool 可以转换所有的数据类型 everything"""
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12193057.html
Copyright © 2011-2022 走看看