• Zuul


    zuul本质:通过过滤器实现服务映射、请求转发、权限校验...

    ----------------

    路由规则

    在zuul配置中,为服务提供者添加路由规则,外部请求网关暴露的服务对应地址,网关自动路由到实际的服务地址(通过过滤器,借助eureka和ribbon实现转发)

    zuul网关服务作为eureka的客户端时,会自动发现服务列表,并自动为每个服务创建一个默认路由规则,不需要手动配置,自动配置项格式如下:

    zuul.routes.serviceAAA.path=/serviceAAA/**

    zuul.routes.serviceAAA.url=serviceAAA

    路由规则是按LinkedHashMap有序存储,如果某个请求匹配多个路由规则,则按照第一个匹配进行路由。properties文件不能保证有序,yaml文件可以 

    ----------------

    去除路由规则

    即不通过网关对外暴露服务serviceAAA

    zuul.ignore-services=serviceAAA

    ----------------

    请求过滤

    继承ZuulFilter实现过滤器,实现4个方法

    在run()中执行具体的过滤逻辑,比如判断request的session中是否存在登录信息;

    在shouldFilter()中判断过滤器是否要对当前请求生效,比如此过滤器只针对某些服务的请求进行过滤;

    ---------------

    过滤器详解

    按生命周期划分过滤器类型:pre、routing、post、error

    流程:request -> pre -> routing -> service实例 -> routing -> post -> response,若过滤链中抛出异常则 -> error 再-> post

    try{
        preRoute();
    }catch(ZuulException e){
         error();
         postRoute();  
    }
    try{
        route();
    }catch(ZuulException e){
         error();
         postRoute();  
    }
    try{
        postRoute();
    }catch(ZuulException e){
         error();
    }
    过滤器执行异常处理流程

    postRoute()过滤器抛异常后进入error()过滤器,然后不再进postRoute()过滤器,直接返回了。请求收不到响应,也没有异常信息

    通过实现一个只处理post过滤器抛出异常的error()过滤器进行兜底P251

    又遇到新的问题:怎么知道是post过滤器抛出的异常?自定义一个FilterProcessor,记录下来P253

    ---------------

    过滤器异常处理机制 P244

    自定义的过滤器中的run方法要用try catch包起来,若抛出异常则必须在catch中 对上下文信息设置异常参数,才能被后续的核心过滤器SendErrorFilter(P243它是post类型不是error类型过滤器)处理

    --------------

    动态路由

    由于网关服务A不能停机,利用SpringCloudConfig构建配置中心服务B,将git作为配置存储地

    1.服务A在配置bootstrap.properties中指定去哪里加载,即指定配置中心服务B的地址

    2.修改git中修改A.properties文件,推送到git仓库

    3.服务A中手动访问/refresh刷新配置

    --------------

    动态过滤器(groovy,不是重点)

  • 相关阅读:
    Python 性能剖分工具
    串口编程
    拼音输入法实现
    Android 第三方分享中遇到的问题以及解决方案
    linux C 获取与修改IP地址
    git拉取远程分支并创建本地分支
    再次探讨企业级开发中的Try......Catch性能问题
    [手游新项目历程]-38-Supervisord守护进程
    公务员考试
    概念的内涵和外延
  • 原文地址:https://www.cnblogs.com/yfzhou528/p/13536713.html
Copyright © 2020-2023  润新知