国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

zuul實現動態路由以及相關源碼解析

Cruise_Chan / 611人閱讀

摘要:下面看看提供的事件模型圖在中有這樣一個實現了的監聽器,代碼如下由此可知在發生和事件時會執行這樣在容器啟動完成后就刷新了路由規則。因此我們如果要主動刷新路由規則,只需要發布一個事件即可,代碼如下刷新了路由規則

關于zuul如何實現動態路由,已經有大神寫博客詳解過,這里不啰嗦了,文章地址:Spring Cloud Zuul實現動態路由,咱們就從這篇文章最后的一個問題講起,作者在最后實現動態刷新路由規則時說:為什么不自己是手動重新加載Locator.dorefresh?非要用事件去刷新?這牽扯到內部的zuul內部組件的工作流程,不僅僅是Locator本身的一個變量,具體想要了解的還得去看源碼。下面我們就來分析下zuul的源碼看看為什么要這樣做?
要講清楚zuul的事件驅動模型,還得知道spring的事件驅動模型,因為zuul的實現正是利用了spring的事件驅動模型實現的。下面看看spring提供的事件模型圖:

在zuul中有這樣一個實現了ApplicationListener的監聽器ZuulRefreshListener ,代碼如下:

private static class ZuulRefreshListener implements ApplicationListener {

        @Autowired
        private ZuulHandlerMapping zuulHandlerMapping;

        private HeartbeatMonitor heartbeatMonitor = new HeartbeatMonitor();

        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            if (event instanceof ContextRefreshedEvent
                    || event instanceof RefreshScopeRefreshedEvent
                    || event instanceof RoutesRefreshedEvent) {
                this.zuulHandlerMapping.setDirty(true);
            }
            else if (event instanceof HeartbeatEvent) {
                if (this.heartbeatMonitor.update(((HeartbeatEvent) event).getValue())) {
                    this.zuulHandlerMapping.setDirty(true);
                }
            }
        }

    }

由此可知在發生ContextRefreshedEvent和RoutesRefreshedEvent事件時會執行this.zuulHandlerMapping.setDirty(true);

public void setDirty(boolean dirty) {
        this.dirty = dirty;
        if (this.routeLocator instanceof RefreshableRouteLocator) {
            ((RefreshableRouteLocator) this.routeLocator).refresh();
        }
    }

這樣在spring容器啟動完成后就刷新了路由規則。因此我們如果要主動刷新路由規則,只需要發布一個RoutesRefreshedEvent事件即可,代碼如下

public void refreshRoute() {
        RoutesRefreshedEvent routesRefreshedEvent = new RoutesRefreshedEvent(routeLocator);
        this.publisher.publishEvent(routesRefreshedEvent);
        logger.info("刷新了路由規則......");
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69936.html

相關文章

  • spring-cloud-zuul原理解析(一)

    摘要:是開源的微服務網關,它可以和,等組件配合使用,網上也有很多如何使用的文章,我們也在生產環境使用了,所以讀了下的源碼,下面把它分享出來,與大家探討下核心原理。 Zuul是Netflix開源的微服務網關,它可以和Eureka,consul,Ribbon,Hystrix等組件配合使用,網上也有很多如何使用zuul的文章,我們也在生產環境使用了,所以讀了下zuul的源碼,下面把它分享出來,與大...

    qingshanli1988 評論0 收藏0
  • 2021 年最新基于 Spring Cloud 的微服務架構分析

    摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...

    cikenerd 評論0 收藏0
  • SpringCloud微服務實戰筆記

    摘要:服務提供者的運行機制用了雙層結構來維護注冊的服務信息,第一層為服務的名稱,第二層為服務的實例名稱。服務注冊中心的運行機制為了防止服務的異常下線,會周期性的清理列表中未續約的服務。負載均衡器的基本功能維護該服務下的所有節點列表。 Spring Boot Spring Boot有什么作用 Spring Boot通過自動化的配置簡化Spring原有的樣板化的配置。 Spring Boo...

    chunquedong 評論0 收藏0
  • 拜托!面試請不要再問我Spring Cloud底層原理!

    摘要:不過大多數講解還停留在對功能使用的層面,其底層的很多原理,很多人可能并不知曉。每個線程池里的線程就僅僅用于請求那個服務。 歡迎關注微信公眾號:石杉的架構筆記(id:shishan100) 每日更新!精品技術文章準時送上! 目錄 一、業務場景介紹 二、Spring Cloud核心組件:Eureka 三、Spring Cloud核心組件:Feign 四、Spring Cloud核心組件:R...

    wums 評論0 收藏0

發表評論

0條評論

Cruise_Chan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<