zuul自定义网关请求重发规则

如何自定义zuul网关请求重发规则,首先需弄清楚框架的执行逻辑,https://cloud.tencent.com/developer/article/1034753 这篇文章解读的还不错

zuul也可通过路由,服务,错误码来配置指定重发对象。

  • zuul既定的过滤器:
           数字代表顺序,数字越小,加载顺序级别越高。分别对应ZuulFilter核心过滤器中的filterType / filterOrder 值

    类型顺序过滤器功能
    pre (前置过滤器类型)-3ServletDetectionFilter标记处理Servlet的类型
    pre-2Servlet30WrapperFilter包装HttpServletRequest请求
    pre-1FormBodyWrapperFilter包装请求体
    pre1DebugFilter标记调试标志
    pre5PreDecorationFilter处理请求上下文供后续使用
    route (路由类型)10RibbonRoutingFilter serviceId请求转发
    route100SimpleHostRoutingFilterurl请求转发
    route500SendForwardFilterforward请求转发
    error (错误处理过滤器类型)0SendErrorFilter处理有错误的请求响应
    post (后置过滤器类型)1000SendResponseFilter处理正常的请求响应
  • 自定义重发请求规则
           这里通过继承ZuulFilter来实现。思路是当前会话加载请求重发过滤器之前,截取配置的请求重发规则,对规则进行篡改,实现自定义规则开启或关闭请求重发。
           获取到当前会话的RequestContext 内容,然后修改“retryable”属性值,再塞回去

    
    @component
    public class ResendRuleFilter extends ZuulFilter{
    	@Override
    	public String filterType(){
    		//前置过滤器类型
    		return PER_TYPE;
    	}
    	
    	@Override
    	public String filterOrder(){
    		//优先级要在route之前,在PreDecorationFilter加载之后
    		return 7;
    	}
    	
    	@Override
    	public boolean shouldFilter(){
    		//是否加载这个过滤器
    		return true;
    	}
    	
    	//方法执行体
    	@Override
    	public Object run(){
    		RequestContext ctx = RequestContext.getCurrentContext();
    		/**自定义规则决定什么业务开启重发,什么关闭重发,
    		**/
    		//关闭请求重发
    		ctx.set("retryable",false);
    	
    		//返回了也不会搭理你
    		return null;
    	}
    	
    }	
    
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值