<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你應該知道的 Nacos 接入和避坑指南

          共 3691字,需瀏覽 8分鐘

           ·

          2020-09-04 13:32


          Hello 大家好,我是阿粉,今天給大家分享微服務環(huán)境下必須要使用的一個強大的組件 Nacos。自從使用了 Nacos,阿粉的服務再也沒有擔心過服務注冊和發(fā)現(xiàn)以及配置管理混亂的問題了。


          背景

          Nacos 致力于幫助開發(fā)人員發(fā)現(xiàn)、配置和管理微服務,Nacos 提供了一組簡單易用的特性集,快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置、服務元數(shù)據(jù)及流量管理。

          目前主流的互聯(lián)網(wǎng)服務都是基于微服務架構(gòu)的,那服務與服務之間的交互是必不可少的,而且各個服務的上下線都是相互獨立的,而且服務的配置信息也是會動態(tài)調(diào)整的,這就需要我們的服務更加靈活。Nacos 的出現(xiàn)就是幫助我們實現(xiàn)這些繁瑣的功能。

          詳細的 Nacos 介紹和部署可以參考官方網(wǎng)站 Nacos.io。這里只介紹一下在 SpringBoot 項目中如何快速接入以及接入和使用過程中可能會遇到的坑。

          接入

          加入依賴

          1. 第一步在 pom 配置文件中加入下面的依賴,用于實現(xiàn)服務注冊發(fā)現(xiàn)和配置中心功能。
          <dependency>  <groupId>com.alibaba.cloudgroupId>  <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>dependency><dependency>  <groupId>com.alibaba.cloudgroupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>dependency>

          增加配置

          1. 第二步在 SpringBoot 項目的啟動類上增加如下注解?@EnableDiscoveryClient?用于啟動服務注冊發(fā)現(xiàn)功能。

          2. 增加配置文件,對應的配置信息需要修改成適合自己的,為了方便管理,應用的分組名稱,命名空間以及相關的配置都需要合理的設置。多個業(yè)務使用同一個 nacos 集群的時候,需要根據(jù)各個的業(yè)務設定各自的命名空間。所有的配置文件都需要在對應的命名空間下設置,避免多個業(yè)務混用,另外業(yè)務需要根據(jù)用到的組件或者配置,設定獨立的配置文件,例如數(shù)據(jù)庫的配置,Redis 的配置等都需要單獨設定,這樣是為了同一個應用其他的其他服務也可以使用,而且再有地址變更的時候可以只修改一個文件就好,不會忘記。

            # 應用服務名稱spring.application.name=application-name# 應用分組名稱spring.cloud.nacos.config.group=GROUP-NAME# 配置文件的后綴名spring.cloud.nacos.config.file-extension=properties# nacos 對應的命名空間,在后臺創(chuàng)建好命名空間后會自動生成spring.cloud.nacos.config.namespace=xxxxxxxxxxxxxxxxxxxxxxxxx# 對應的配置文件# MySQL 相關配置spring.cloud.nacos.config.ext-config[0].data-id=mysql.propertiesspring.cloud.nacos.config.ext-config[0].group=GROUP-NAME# Redis 相關配置spring.cloud.nacos.config.ext-config[1].data-id=redis.propertiesspring.cloud.nacos.config.ext-config[1].group=GROUP-NAME# 其他配置等spring.cloud.nacos.config.ext-config[2].data-id=other.propertiesspring.cloud.nacos.config.ext-config[2].group=GROUP-NAME# 配置中心地址,多個逗號分隔spring.cloud.nacos.config.server-addr=xxx.xx.xx.xx:xxxx# 服務注冊發(fā)現(xiàn)地址,多個逗號分隔spring.cloud.nacos.discovery.server-addr=xxx.xx.xx.xx:xxxx# 集群名稱spring.cloud.nacos.discovery.cluster-name=CLUSTER-NAME
          3. 代碼中可以使用注解?@Value()?來直接讀取 Nacos 配置中的屬性參數(shù),也可以使用?@ConfigurationProperties(prefix = "spring.datasource")?讀取批量參數(shù)。

          4. spring.cloud.nacos.config.ext-config[0].refresh=true?該參數(shù)表示是否開啟自動更新,根據(jù)是否需要自動更新覺得是否配置,如果需要自動更新,加上這個配置后還需要在需要自動更新配置的 Bean 上面增加@RefreshScop?注解。然后對應的 Bean 內(nèi)部的屬性就可以實現(xiàn)自動更新了。增加了spring.cloud.nacos.config.ext-config[0].refresh=true?配置后在修改了 Nacos 中的配置過后日志會出現(xiàn)下面信息,會重新加載配置,并且輸出變更的 key 信息。


          服務調(diào)用

          當所有的服務都接入 Nacos 過后,我們在 Nacos 的后臺就可以看到每個服務的情況,如下圖,可以看到服務狀態(tài)。

          然后我們在服務 A 里面如果要調(diào)用服務 B 的時候,就可以直接在 FeginClient 中配置服務 B 的名稱,不需要填寫 URL 了。這樣我們就不用考慮服務 B 是否地址和端口會不會變。服務 B 的實例增加還是減少,端口是否變了,對服務 A 來說都不關心,只要有個服務名稱就可以了。


          避坑

          命名空間

          Nacos 有一個默認的名為?public?的命名空間,這個命名空間是無法刪除的,所有未指定命名空間的配置都會放在該命名空間下;同樣的 Nacos 有一個默認的名為?DEFAULT_GROUP??的分組,在沒有指定分組名稱的時候默認的配置都是在該分組下。

          對于我們應用程序來說,由于很多情況下一個 Nacos 集群是多個團隊共同使用的,所以為了方便管理,我們需要根據(jù)自己的業(yè)務設置自己的命名空間,用于存放本業(yè)務的配置文件。本命名空間下的配置文件,根據(jù)各個的模塊決定是否需要重新分組。

          要知道在沒有清晰的命名空間劃分的時候,要想修改一個配置的內(nèi)容,是很難受的一件事情。線上的配置調(diào)整,一個不小心就是事故。如果還是自動更新配置的話,那連后悔的機會都沒有。

          精細配置

          配置文件應該專一,一個配置文件就設置一個內(nèi)容,比如 MySQL 的數(shù)據(jù)源單獨一個配置,Redis 的數(shù)據(jù)源單獨一個配置,如果多個 Redis 服務,根據(jù)功能建議分開配置,因為并不是所有的服務都需要每個 Redis 的鏈接配置。各自的服務根據(jù)需要單獨引用對應的配置文件即可。

          將所有的配置獨立成一個配置文件方便后續(xù)修改配置,只要修改一個配置文件就好,不用擔心其他還有未修改的地方。

          合理的規(guī)劃配置文件的內(nèi)容,往往很多時候可以事半功倍,極大的節(jié)約時間和減少出錯的概率。

          自動刷新

          前面介紹了如何設置配置自動刷新,不過服務是否需要自動更新配置,這個根據(jù)自身的業(yè)務去決定。

          我這里一般不建議設置自動更新,因為現(xiàn)在都是微服務部署,有時候我們上線一個新功能的時候都是灰度發(fā)布,如果配置自動更新,再調(diào)整配置過后,全部實例都會生效,這樣會有風險。不設置自動更新的話,我們可以單獨重啟個別實例,觀察線上情況,等穩(wěn)定了再發(fā)布所有服務,這樣會安全很多。

          當然對于沒有那么多服務,不需要灰度,影響不大的場景下,配置自動更新會方便很多,再修改配置后不需要重啟服務。

          總結(jié)

          Nacos 作為服務的注冊發(fā)現(xiàn)和配置的統(tǒng)一管理確實十分出色,除了能快速接入 SpringBoot 項目之外,其他的框架都能快速的接入,更多使用可以參考官網(wǎng)。

          最后希望大家都能解放雙手快速接入玩起來!

          寫在最后

          最后邀請你加入我們的知識星球,這里有 1800+ 優(yōu)秀的人與你一起進步,如果你是小白那你是穩(wěn)賺了,很多業(yè)內(nèi)經(jīng)驗和干貨分享給你;如果你是大佬,那可以進來我們一起交流分享你的經(jīng)驗,說不定日后我們還可以有合作,給你的人生多一個可能。


          最后說兩句(求關注)

          最近大家應該發(fā)現(xiàn)微信公眾號信息流改版了吧,再也不是按照時間順序展示了。這就對阿粉這樣的堅持的原創(chuàng)小號主,可以說非常打擊,閱讀量直線下降,正反饋持續(xù)減弱。

          所以看完文章,哥哥姐姐們給阿粉來個在看吧,讓阿粉擁有更加大的動力,寫出更好的文章,拒絕白嫖,來點正反饋唄~。

          如果想在第一時間收到阿粉的文章,不被公號的信息流影響,那么可以給Java極客技術設為一個星標

          最后感謝各位的閱讀,才疏學淺,難免存在紕漏,如果你發(fā)現(xiàn)錯誤的地方,由于本號沒有留言功能,還請你在后臺留言指出,我對其加以修改。

          最后謝謝大家支持~

          < END >


          瀏覽 82
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美AⅤ在线 | 高清无码18 | 嗯~公啊~嗯~挺进啊~A片视频 | 免费亚洲视频在线观看 | 性生活毛片 |