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

本文介绍如何通过自定义Zuul过滤器实现请求重试功能,详细解析了Zuul过滤器的工作原理及执行顺序,并提供了一个具体的实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何自定义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;
    	}
    	
    }	
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值