使用Nacos做為SpringCloud的注冊中心

【轉(zhuǎn)載請注明出處】:http://www.reibang.com/p/d96fe9856f75

1. Nacos介紹

1.1 Nacos關(guān)鍵特性

Nacos 致力于發(fā)現(xiàn)邪财、配置和管理微服務(wù)曹阔。Nacos 支持幾乎所有主流類型的“服務(wù)”的發(fā)現(xiàn)械巡、配置和管理:

Nacos 的關(guān)鍵特性包括:

  • 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測
    Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)。服務(wù)提供者使用 原生SDK昼汗、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務(wù)消費者可以使用DNS TODOHTTP&API查找和發(fā)現(xiàn)服務(wù)观谦。

    Nacos 提供對服務(wù)的實時的健康檢查,阻止向不健康的主機(jī)或服務(wù)實例發(fā)送請求桨菜。Nacos 支持傳輸層 (PING 或 TCP)和應(yīng)用層 (如 HTTP豁状、MySQL、用戶自定義)的健康檢查倒得。 對于復(fù)雜的云環(huán)境和網(wǎng)絡(luò)拓?fù)洵h(huán)境中(如 VPC泻红、邊緣網(wǎng)絡(luò)等)服務(wù)的健康檢查,Nacos 提供了 agent 上報模式和服務(wù)端主動檢測2種健康檢查模式霞掺。Nacos 還提供了統(tǒng)一的健康檢查儀表盤谊路,幫助您根據(jù)健康狀態(tài)管理服務(wù)的可用性及流量。

  • 動態(tài)配置服務(wù)
    動態(tài)配置服務(wù)可以讓您以中心化菩彬、外部化和動態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置缠劝。

    動態(tài)配置消除了配置變更時重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷骗灶。

    配置中心化管理讓實現(xiàn)無狀態(tài)服務(wù)變得更簡單剩彬,讓服務(wù)按需彈性擴(kuò)展變得更容易。

    Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務(wù)和應(yīng)用的配置矿卑。Nacos 還提供包括配置版本跟蹤喉恋、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新狀態(tài)跟蹤在內(nèi)的一系列開箱即用的配置管理特性,幫助您更安全地在生產(chǎn)環(huán)境中管理配置變更和降低配置變更帶來的風(fēng)險轻黑。

  • 動態(tài) DNS 服務(wù)
    動態(tài) DNS 服務(wù)支持權(quán)重路由糊肤,讓您更容易地實現(xiàn)中間層負(fù)載均衡、更靈活的路由策略氓鄙、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單DNS解析服務(wù)馆揉。動態(tài)DNS服務(wù)還能讓您更容易地實現(xiàn)以 DNS 協(xié)議為基礎(chǔ)的服務(wù)發(fā)現(xiàn),以幫助您消除耦合到廠商私有服務(wù)發(fā)現(xiàn) API 上的風(fēng)險抖拦。

    Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務(wù)的關(guān)聯(lián)域名和可用的 IP:PORT 列表.

  • 服務(wù)及其元數(shù)據(jù)管理
    Nacos 能讓您從微服務(wù)平臺建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù)升酣,包括管理服務(wù)的描述、生命周期态罪、服務(wù)的靜態(tài)依賴分析噩茄、服務(wù)的健康狀態(tài)、服務(wù)的流量管理复颈、路由及安全策略绩聘、服務(wù)的 SLA 以及最首要的 metrics 統(tǒng)計數(shù)據(jù)。

1.2 Nacos 生態(tài)圖

image.png

Nacos 無縫支持一些主流的開源生態(tài)耗啦,例如

使用 Nacos 簡化服務(wù)發(fā)現(xiàn)、配置管理帜讲、服務(wù)治理及管理的解決方案衅谷,讓微服務(wù)的發(fā)現(xiàn)、管理似将、共享会喝、組合更加容易。

2. 啟動Nacos服務(wù)

2.1 預(yù)備環(huán)境準(zhǔn)備

Nacos 依賴 Java 環(huán)境來運行玩郊。如果您是從代碼開始構(gòu)建并運行Nacos肢执,還需要為此配置 Maven環(huán)境,請確保是在以下版本環(huán)境中安裝使用:

  • 64 bit OS译红,支持 Linux/Unix/Mac/Windows预茄,推薦選用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+侦厚;下載 & 配置耻陕。
  • Maven 3.2.x+;下載 & 配置刨沦。

2.2 下載源碼或者安裝包

你可以通過源碼和發(fā)行包兩種方式來獲取 Nacos诗宣。

  • 從 Github 上下載源碼方式

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos clean install -U  
    ls -al distribution/target/
    cd distribution/target/nacos-server-$version/nacos/bin
    
  • 下載編譯后壓縮包方式
    您可以從 最新穩(wěn)定版本 下載 nacos-server-$version.zip 包。

      unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
      cd nacos/bin
    

2.3 啟動服務(wù)器

  • Linux/Unix/Mac
    啟動命令(standalone代表著單機(jī)模式運行想诅,非集群模式):
    sh startup.sh -m standalone

  • Windows
    啟動命令:
    cmd startup.cmd
    或者雙擊startup.cmd運行文件召庞。

2.4 關(guān)閉服務(wù)器

  • Linux/Unix/Mac
    sh shutdown.sh

  • Windows
    cmd shutdown.cmd
    或者雙擊shutdown.cmd運行文件岛心。

2.5 控制臺

瀏覽器打開 http://127.0.0.1:8848/nacos
默認(rèn)的用戶名密碼都是nacos

3. 啟動服務(wù)發(fā)現(xiàn)

3.1 service-provider

添加依賴:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>0.9.0.RELEASE</version>
</dependency>

配置文件

server:
  port: 8021
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

啟動類

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

    @RestController
    class EchoController {
        @GetMapping(value = "/echo")
        public String echo(String name) {
            return "Hello " + name;
        }
    }
}

啟動服務(wù)即可在Nacos控制臺的服務(wù)列表中看到。

3.2 service-consumer

添加依賴:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

配置文件

 server:
  port: 8011
spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

這里使用feign調(diào)用provider
client

@FeignClient(name = "service-provider")
public interface NacosClient { 
    @GetMapping(value = "/echo")
    ResponseEntity<String> echo(String name) ;
}

啟動類

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

    @RestController
    public class TestController {
         @Autowired
          private NacosClient client;

          @GetMapping(value = "/echo")
          public ResponseEntity<String> echo(String name) {
            return client.echo(name);
          }
         
    }

}

啟動Consumer篮灼,然后訪問http://localhost:8011/echo?name=zhangsan即可看到provider的響應(yīng)忘古。

4. 啟動配置管理

將service-consumer項目改成從Nacos拿配置
依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.9.0.RELEASE</version>
 </dependency>

配置文件

spring:
  application:
    name: service-consumer
  profiles:
    active: single
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yaml

為了測試方便,在TestController中添加一個配置變量

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

    @RestController
    @RefreshScope
    public class TestController {
          @Autowired
          private NacosClient client;
          @Value("${useLocalCache:false}")
          private boolean useLocalCache;

          @GetMapping("/get")
          public boolean get() {
            return useLocalCache;
          }

          @GetMapping(value = "/echo")
          public ResponseEntity<String> echo(String name) {
            return client.echo(name);
          }
         
    }

}

在 Nacos Spring Cloud 中诅诱,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默認(rèn)為 spring.application.name 的值髓堪,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
  • spring.profile.active 即為當(dāng)前環(huán)境對應(yīng)的 profile
    注意:當(dāng) spring.profile.active 為空時娘荡,對應(yīng)的連接符 - 也將不存在干旁,dataId 的拼接格式變成 ${prefix}.${file-extension}
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置炮沐。目前只支持 propertiesyaml 類型争群。

打開Nacos控制臺的配置管理,添加配置項

  • Data ID:service-consumer-single.yaml
  • 配置內(nèi)容:
    server:
      port: 8011
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  
     
    useLocalCache: false
    

重新啟動service-consumer央拖,訪問http://localhost:8011/echo?name=zhangsan可看到provider的響應(yīng),訪問http://localhost:8011/get鹉戚,此時返回內(nèi)容為false鲜戒。
在Nacos控制臺的配置管理更新值useLocalCache: true,再次訪問http://localhost:8011/get抹凳,此時返回內(nèi)容為true遏餐,說明程序中的useLocalCache值已經(jīng)被動態(tài)更新了。

【轉(zhuǎn)載請注明出處】: http://www.reibang.com/p/d96fe9856f75

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赢底,一起剝皮案震驚了整個濱河市失都,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幸冻,老刑警劉巖粹庞,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洽损,居然都是意外死亡庞溜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門碑定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來流码,“玉大人,你說我怎么就攤上這事延刘÷裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵碘赖,是天一觀的道長驾荣。 經(jīng)常有香客問我外构,道長,這世上最難降的妖魔是什么秘车? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任典勇,我火速辦了婚禮,結(jié)果婚禮上叮趴,老公的妹妹穿的比我還像新娘割笙。我一直安慰自己,他們只是感情好眯亦,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布伤溉。 她就那樣靜靜地躺著,像睡著了一般妻率。 火紅的嫁衣襯著肌膚如雪乱顾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天宫静,我揣著相機(jī)與錄音走净,去河邊找鬼。 笑死孤里,一個胖子當(dāng)著我的面吹牛伏伯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捌袜,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼说搅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虏等?” 一聲冷哼從身側(cè)響起弄唧,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霍衫,沒想到半個月后候引,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡敦跌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年背伴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峰髓。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡傻寂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出携兵,到底是詐尸還是另有隱情疾掰,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布徐紧,位于F島的核電站静檬,受9級特大地震影響炭懊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拂檩,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一侮腹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稻励,春花似錦父阻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煤篙,卻和暖如春斟览,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辑奈。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工苛茂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸠窗。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓妓羊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塌鸯。 傳聞我的和親對象是個殘疾皇子侍瑟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348