240 發(fā)簡信
IP屬地:北京
  • zuul是被spring集成在spring-cloud項目下的凭豪,一般都會配合eureak使用
    eureka-client包中器腋,在DiscoveryClient初始化的時候顾腊,默認(rèn)會開啟一個定時器譬胎,每隔30秒發(fā)布一個HeartbeatEvent事件浴井,而ZuulRefreshListener會監(jiān)聽這個事件钦讳,然后調(diào)用ZuulHandlerMapping.setDirty(true);

    所以鲫剿,RouteLocator的refresh時間不能太長,不然后果很嚴(yán)重
    如果refresh結(jié)束之前涂佃,dirty值已經(jīng)被改成false励翼,當(dāng)時確實更新的route不會生效粮揉,但是會在下一個HeartbeatEvent事件發(fā)布后生效

    如果,需要在refresh之后抚笔,立刻生效,也可以通過aop+反射來解決這個問題
    private Logger logger = LoggerFactory.getLogger(CompositeRouteAop.class);

    @Resource
    private ZuulHandlerMapping handlerMapping;

    @Pointcut("execution(* org.springframework.cloud.netflix.zuul.filters.CompositeRouteLocator.refresh(..))")
    public void pointCut() {
    }

    @Around("pointCut()")
    public Object resetDirty(ProceedingJoinPoint joinPoint) throws Throwable {
    Object proceed = joinPoint.proceed(joinPoint.getArgs());

    try {
    Field dirty = ZuulHandlerMapping.class.getDeclaredField("dirty");
    dirty.setAccessible(true);
    dirty.setBoolean(handlerMapping, true);
    } catch (Throwable e) {
    logger.error("reset zuulHandlerMapping dirty value error after refresh route", e);
    }

    return proceed;
    }

  • zuul是被spring集成在spring-cloud項目下的侨拦,一般都會配合eureak使用
    eureka-client包中殊橙,在DiscoveryClient初始化的時候,默認(rèn)會開啟一個定時器狱从,每隔30秒發(fā)布一個HeartbeatEvent事件膨蛮,而ZuulRefreshListener會監(jiān)聽這個事件,然后調(diào)用ZuulHandlerMapping.setDirty(true);

    所以季研,RouteLocator的refresh時間不能太長敞葛,不然后果很嚴(yán)重
    如果refresh結(jié)束之前,dirty值已經(jīng)被改成false与涡,當(dāng)時確實更新的route不會生效惹谐,但是會在下一個HeartbeatEvent事件發(fā)布后生效

    如果,需要在refresh之后驼卖,立刻生效氨肌,也可以通過aop+反射來解決這個問題
    private Logger logger = LoggerFactory.getLogger(CompositeRouteAop.class);

    @Resource
    private ZuulHandlerMapping handlerMapping;

    @Pointcut("execution(* org.springframework.cloud.netflix.zuul.filters.CompositeRouteLocator.refresh(..))")
    public void pointCut() {
    }

    @Around("pointCut()")
    public Object resetDirty(ProceedingJoinPoint joinPoint) throws Throwable {
    Object proceed = joinPoint.proceed(joinPoint.getArgs());

    try {
    Field dirty = ZuulHandlerMapping.class.getDeclaredField("dirty");
    dirty.setAccessible(true);
    dirty.setBoolean(handlerMapping, true);
    } catch (Throwable e) {
    logger.error("reset zuulHandlerMapping dirty value error after refresh route", e);
    }

    return proceed;
    }

    spring cloud zuul使用記錄(2)路由接入流程以及并發(fā)刷新問題

    最近在看spring cloud zuul(版本Finchley.SR1)的源代碼,一不小心還看到了個bug(我認(rèn)為是哈)酌畜,更神奇的是怎囚,這個bug一年前已經(jīng)有人提了issue...

亚洲A日韩AV无卡,小受高潮白浆痉挛av免费观看,成人AV无码久久久久不卡网站,国产AV日韩精品