• SpringCloud Zuul网关的简单理解


    Zuul网关功能

    请求路由、服务路由、请求过滤

    请求路由

    参数配置如下所示,所有能够配置path规则的请求,都会被zuul网关转发到对应的url上。

    zuul.routes.user-service.path=/user-service/**  
    zuul.routes.user-service.url=http://178.69.1.39:9104/ 
    

    服务路由

    参数配置如下所示,zuul会对服务user-service进行路由,所有能够配置path规则的请求,都会被zuul网关转发到serivce-id服务上。

    zuul.routes.user-service.path=/user-service/**  
    zuul.routes.user-service.serviceId=user-service/**  
    zuul.routes.user-service.strip-prefix=false
    

    Zuul内置Hystrix和Ribbon

    Zuul内置Hystrix和Ribbon模块的依赖,所以zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡功能。
    当使用path与url的映射关系来配置路由规则的时候,对于路由转发的请求不会采用hystrixCommand来包装,所以这类请求没有线程隔离和断路器的保护,并且也不会有负载均衡的能力。
    因此,在使用zuul的时候尽量使用path和serviceId的组合(也就是服务路由)来进行配置,这样不仅可以保证api网关的健壮和稳定,也能用到ribbon的客户端负载均衡功能。
    Zuul配置Hystrix和Ribbon,详情见:
    https://www.cnblogs.com/expiator/p/10753746.html

    请求过滤ZuulFilter

    如果想过滤请求,可以继承ZuulFilter类,重写方法。

    /**
     * 
     *  Standard types in Zuul are "pre" for pre-routing filtering,
     * "route" for routing to an origin, "post" for post-routing filters, "error" for error handling.
     *  
     * 过滤的类型,可以返回"pre"、"route"、"post"、"error"
     * filterType() - 按类型对过滤器进行分类。 可以返回用于预路由过滤的“pre”,用于路由到原点的“route”,
     * 用于后路由过滤的“post”,用于错误处理的“error”。
     * @return
     */
    @Override
    public String filterType() {
    	return "pre";
    }
    
    /**
     * 
     *   filterOrder() must also be defined for a filter. Filters may have the same  filterOrder if precedence is not
     *  important for a filter. filterOrders do not need to be sequential.
     *  返回数字,表示过滤器执行的顺序。filterOrders返回的结果不需要是连续的顺序,如1,2,3,4。
     * @return
     */
    @Override
    public int filterOrder() {
    	return 0;
    }
    
    /**
     * 是否过滤
     * @return
     */
    @Override
    public boolean shouldFilter() {
    	return true;
    }
    
    /**
     * 过滤器的具体逻辑。
     * @return
     */
    @Override
    public Object run() {}
    

    示例代码如下:
    https://github.com/firefoxer1992/SpringCloudProject/blob/master/zuul/src/main/java/com/example/demo/filter/AccessFilter.java

    参考资料:

    《SpringCloud微服务实战》

  • 相关阅读:
    VBScript把json字符串解析成json对象的2个方法
    vue+php接口
    td标签 内容垂直、水平居中
    win7 安装 IIS 配置ASP 【原创】
    PS 实用技巧
    通信原理实践(一)——音频信号处理
    德飞莱STM32单片机学习(一)——下载环境搭建
    电赛总结(四)——波形发生芯片总结之AD9854
    电赛总结(四)——波形发生芯片总结之AD9851
    电赛总结(四)——波形发生芯片总结之AD9834
  • 原文地址:https://www.cnblogs.com/expiator/p/10778213.html
Copyright © 2020-2023  润新知