千家信息网

Springcloud中Zuul的RibbonRoutingFilter有什么作用

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本篇内容介绍了"Springcloud中Zuul的RibbonRoutingFilter有什么作用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理
千家信息网最后更新 2024年11月11日Springcloud中Zuul的RibbonRoutingFilter有什么作用

本篇内容介绍了"Springcloud中Zuul的RibbonRoutingFilter有什么作用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

spring-cloud-netflix-zuul的版本是2.1.2.release.

图1是RibbonRoutingFilter的继承图

        

                     图1 类继承图

RibbonRoutingFilter是个roue类型的ZuulFilter,如下List-1所示,它的filterOrder是10; 在run方法中首先构造commandContext,之后调用内部方法forward。

List-1

@Overridepublic String filterType() {    return ROUTE_TYPE;}@Overridepublic int filterOrder() {    return RIBBON_ROUTING_FILTER_ORDER;}@Overridepublic boolean shouldFilter() {    RequestContext ctx = RequestContext.getCurrentContext();    return (ctx.getRouteHost() == null && ctx.get(SERVICE_ID_KEY) != null            && ctx.sendZuulResponse());}@Overridepublic Object run() {    RequestContext context = RequestContext.getCurrentContext();    this.helper.addIgnoredHeaders();    try {        RibbonCommandContext commandContext = buildCommandContext(context);        ClientHttpResponse response = forward(commandContext);        setResponse(response);        return response;    }    catch (ZuulException ex) {        throw new ZuulRuntimeException(ex);    }    catch (Exception ex) {        throw new ZuulRuntimeException(ex);    }}

如下List-2所示,首先用ribbonCommandFactory构建RibbonCommand,之后调用RibbonCommand的execute(),这里的RibbonCommandFactory和RibbonCommand都是接口,具体实现有三个。

List-2

protected ClientHttpResponse forward(RibbonCommandContext context) throws Exception {    Map info = this.helper.debug(context.getMethod(),            context.getUri(), context.getHeaders(), context.getParams(),            context.getRequestEntity());    RibbonCommand command = this.ribbonCommandFactory.create(context);    try {        ClientHttpResponse response = command.execute();        this.helper.appendDebug(info, response.getRawStatusCode(),                response.getHeaders());        return response;    }    catch (HystrixRuntimeException ex) {        return handleException(info, ex);    }}

List-3 RibbonCommandFactory和RibbonCommand接口

public interface RibbonCommand extends HystrixExecutable {}public interface RibbonCommandFactory {        T create(RibbonCommandContext context);}

RibbonCommandFactory的三个实现类如下图2

   

 图2

HttpClientRibbonCommandFactory用于构建HttpClientRibbonCommand, OkHttpRibbonCommandFactory用于构建OkHttpRibbonCommand, RestClientRibbonCommandFactory用于构建RestClientRibbonCommand。

"Springcloud中Zuul的RibbonRoutingFilter有什么作用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0