Nacos注冊(cè)、發(fā)現(xiàn)、消費(fèi)入門

簡介

Nacos是Alibaba在2018年7月發(fā)布的一個(gè)新開源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。(官方文檔解釋)
簡單說就是集注冊(cè)中心與配置中心于一身(nacos = eureka + config)
屬于spring-cloud-alibaba開源組件中的一員(Spring Cloud 加盟重量級(jí)成員Spring Cloud Alibaba,打造更符合中國國情的微服務(wù)體系
官網(wǎng):https://nacos.io/en-us/ (當(dāng)前版本1.1.0,從0.8.0版本開始進(jìn)入正式版)
源碼:https://github.com/alibaba/nacos
官方文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html

三大功能

  • 服務(wù)發(fā)現(xiàn)與服務(wù)管理
    Nacos同時(shí)支持基于DNS和基于RPC(如Dubbo/gRPC)的服務(wù)發(fā)現(xiàn),并提供服務(wù)的實(shí)時(shí)健康檢查,基于Nacos更方便的實(shí)現(xiàn)服務(wù)斷路器。Nacos提供的服務(wù)的元數(shù)據(jù)管理,路由及流量管理策略能夠幫助更好的構(gòu)建更強(qiáng)壯的微服務(wù)平臺(tái)
  • 動(dòng)態(tài)配置管理
    動(dòng)態(tài)配置服務(wù)允許在所有環(huán)境中以集中和動(dòng)態(tài)的方式管理所有應(yīng)用程序或服務(wù)的配置。動(dòng)態(tài)配置消除了配置更新時(shí)重新部署應(yīng)用程序和服務(wù)的需要??梢愿奖愕膶?shí)現(xiàn)無狀態(tài)服務(wù),更輕松地實(shí)現(xiàn)按需彈性擴(kuò)展服務(wù)實(shí)例
  • 動(dòng)態(tài)DNS服務(wù)
    支持權(quán)重路由的動(dòng)態(tài)DNS服務(wù)可以更輕松地在數(shù)據(jù)中心內(nèi)的生產(chǎn)環(huán)境中實(shí)施中間層負(fù)載平衡,靈活的路由策略,流量控制和簡單的DNS解析服務(wù),更容易的實(shí)現(xiàn)DNS-based服務(wù)發(fā)現(xiàn)

Nacos安裝

github下載

github下載

windows下解壓后運(yùn)行/bin/startup.cmd 關(guān)閉服務(wù)運(yùn)行shutdown.cmd
Linux環(huán)境執(zhí)行 sh startup.sh -m standalone 關(guān)閉服務(wù) sh shutdown.sh -m standalone
待服務(wù)啟動(dòng)成功后,訪問控制臺(tái)顯示的地址:
nacos管理平臺(tái)地址

進(jìn)入管理頁面:
nacos管理頁

管理頁面分為三大類:

  • 配置管理(配置中心)
  • 服務(wù)管理(服務(wù)注冊(cè)中心)
  • 集群管理

資料:
源碼分析:http://www.iocoder.cn/categories/Nacos/#

使用Nacos作為注冊(cè)中心完成服務(wù)注冊(cè)與發(fā)現(xiàn)

服務(wù)提供者
新建springboot項(xiàng)目,配置pom文件

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>        <!--  注意版本號(hào),spring-cloud-alibaba  0.2.x支持springboot  2.0.x版本, 0.1.x支持springboot 1.x版本   深坑已踩-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <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>
        </dependency>
    </dependencies>

在應(yīng)用主類上加上springcloud服務(wù)注冊(cè)發(fā)現(xiàn)注解@EnableDiscoveryClient


application注解

配置文件(配置注冊(cè)地址與服務(wù)名稱)

    server.port=8000
    
    spring.application.name=alibaba-nacos-zzb-demo
    
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
.properties

配置好后,啟動(dòng)項(xiàng)目
出現(xiàn)

2019-08-01 10:41:06.741  INFO 8064 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, alibaba-nacos-zzb-demo 172.xx.xx.xxx:8000 register finished

便表示注冊(cè)成功了
打開nacos管理頁會(huì)看到一條服務(wù)注冊(cè)信息

log

點(diǎn)擊詳情
可以查看當(dāng)前服務(wù)集群數(shù)等詳情
detail

服務(wù)消費(fèi)者
新建springboot工程,作為服務(wù)的消費(fèi)者
pom文件、工程應(yīng)用主類、配置文件與提供者相同

通過Robbin實(shí)現(xiàn)
應(yīng)用主類

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDemoApplication {

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

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

controller實(shí)例

@RestController
public class TestController {

    private final RestTemplate restTemplate;

    private static final String SERVICE_NAME = "alibaba-nacos-zzb-demo";

    @Autowired
    public TestController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/demoTest")
    public String demoTest() {
        String url = "http://" + SERVICE_NAME + "/test";     //不能通過url直接調(diào)用
        String forObject = restTemplate.getForObject( url, String.class);
        return "URL: " + url + " RETURN: " + forObject;
    }
}

啟動(dòng)工程
nacos管理平臺(tái)已經(jīng)顯示注冊(cè)上來了


robbin

接口訪問


robbinApi

通過FeignClient實(shí)現(xiàn)
pom文件需要添加

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

應(yīng)用主類

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class NacosDemoApplication {

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

controller實(shí)例

@RestController
public class TestController {

    @Resource
    private TestService testService;

    @GetMapping("/feignTest")
    public String feignTest() {
        return testService.test();
    }

}

接口訪問


feighApi

使用Nacos作為配置中心

Nacos配置要點(diǎn)
基本概念

  • Data Id —— 相當(dāng)于文件名
  • Group —— 分組管理
  • Namspace —— 命名空間
    解釋
    Data Id
  • 默認(rèn)值為: {spring.cloud.nacos.config.prefix}-{spring.profile.active}.${spring.cloud.nacos.config.file-extension}
  • spring.cloud.nacos.config.prefix的默認(rèn)值為${spring.application.name}
  • spring.cloud.nacos.config.file-extension的默認(rèn)值為properties
  • 當(dāng)spring.profiles.active未配置時(shí),則匹配${spring.application.name}.properties
  • 若設(shè)置了spring.profiles.active而Nacos中存在{spring.application.name}.properties時(shí),若還存在{spring.application.name}-${spring.profiles.active}.properties,則默認(rèn)匹配后者,若不存在,則會(huì)自動(dòng)匹配前者
  • 由于Nacos建議且默認(rèn)用spring.application.name作為Data Id的前綴,若要在不同服務(wù)中共享項(xiàng)目統(tǒng)一配置,則可以通過配置spring.cloud.nacos.config.shared-dataids或spring.cloud.nacos.config.refreshable-dataids來添加共享配置,前者不支持自動(dòng)刷新,后者支持 (需要支持刷新的話,需要兩個(gè)都設(shè)置上,親測(cè)有效)
    Group
    這是一個(gè)很靈活的配置項(xiàng),并沒有固定的規(guī)定,可以用作多環(huán)境、多模塊、多版本之間區(qū)分配置
    Namespace
    推薦使用命名空間來區(qū)分不同環(huán)境的配置,因?yàn)槭褂胮rofiles或group會(huì)使不同環(huán)境的配置展示到一個(gè)頁面
    可在nacos管理平臺(tái)服務(wù)管理->命名空間配置多個(gè)基于不同場(chǎng)景的配置
    namespaceSetting

    這一項(xiàng)配置將在配置列表中展現(xiàn)
    namespaceSetting

    nacos在配置命名空間時(shí)使用的是命名空間id,不配置默認(rèn)public環(huán)境
    配置示例如下
    namespace

    (注冊(cè)時(shí)配置相同)

nacos后臺(tái)提供歷史版本查詢功能(保留30天)


history

添加配置
在啟動(dòng)好的nacos管理后臺(tái)創(chuàng)建一條配置


setting

按照需要的情況進(jìn)行設(shè)置(注意Data Id命名規(guī)范)
新建springboot項(xiàng)目,配置pom文件
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>        <!--  注意版本號(hào),spring-cloud-alibaba  0.2.x支持springboot  2.0.x版本, 0.1.x支持springboot 1.x版本   深坑已踩-->
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <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-config</artifactId>
    </dependency>
</dependencies>

(above all, 可以看出來discovery和config可以分開用,沒有互相依賴的關(guān)系)
使用

@RestController
@RefreshScope
public class TestController {

    @Value("${serviceTitle:}")
    private String serviceTitle;
    @Value("${serviceText:}")
    private String serviceText;

    @GetMapping("/test")
    public String test() {
        return "GET " + serviceTitle + ":" + serviceText + ";SUCCESS...";
    }
}

@RefreshScope用來讓這個(gè)類下的配置內(nèi)容支持動(dòng)態(tài)刷新
創(chuàng)建配置文件bootstrap.yml
作為配置中心時(shí),必須要使用bootstrap.yml,因?yàn)閎ootstrap.yml加載順序優(yōu)先于application.properties,會(huì)默認(rèn)查找項(xiàng)目名.yml的配置文件

spring:
  cloud:
    nacos:
      config:
        server-addr: 172.xx.xx.xxx:8848

啟動(dòng)項(xiàng)目

2019-08-01 18:15:20.920  INFO 15296 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'alibaba-nacos-zzb-demo.properties', group: 'DEFAULT_GROUP'
2019-08-01 18:15:20.922  INFO 15296 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-zzb-demo.properties'}]}

當(dāng)出現(xiàn)上述日志則表示成功
現(xiàn)在訪問接口試試


api

成功 :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容