Nacos 入門

簡(jiǎn)介

【官方文檔】

  • 前四個(gè)字母為Nameing和Configuration的前兩個(gè)字母揣云,最后的s為Service柴灯。Nacos是一個(gè)更易于構(gòu)建原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)瞧壮。

  • 能夠替代Eureka做服務(wù)注冊(cè)中心、替代Config做服務(wù)配置中心

  • Nacos支持AP直砂、CP的切換

Docker安裝單機(jī)版Nacos

  • 進(jìn)入一個(gè)文件夾幌陕,然后Clone項(xiàng)目
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
  • 使用MySQL5.7
docker-compose -f example/standalone-mysql-5.7.yaml up
  • 使用MySQL8
docker-compose -f example/standalone-mysql-8.yaml up

Nacos 作為服務(wù)注冊(cè)中心

服務(wù)提供者

新建module
pom.xml的依賴
<dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web組件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>
application.yml
server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.135:8848 # 配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'
啟動(dòng)類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentApplication9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentApplication9001.class,args);
    }
}
一個(gè)簡(jiǎn)單的測(cè)試controller
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos")
    public String getPayment() {

        String result = "nacos registry, serverPort: " + serverPort;

        return result;
    }
}

參考上面步驟存崖,再新建一個(gè)提供者實(shí)例冻记,端口9002,或者使用idea啟動(dòng)多實(shí)例来惧,用于下面演示負(fù)載均衡

服務(wù)消費(fèi)者

新建module
pom.xml的依賴
<dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web組件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>
application.yml
server:
  port: 8400

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.135:8848 # 配置Nacos地址


# 消費(fèi)者將要去訪問(wèn)的微服務(wù)名稱(注冊(cè)成功進(jìn)nacos的微服務(wù)提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider
啟動(dòng)類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication8400 {

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

}
RestTemplate配置類
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

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

}
一個(gè)簡(jiǎn)單的測(cè)試controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @GetMapping("/consumer/payment/nacos")
    public String getPayment() {
        String url = serverUrl + "/payment/nacos";
        return restTemplate.getForObject(url, String.class);
    }
}

測(cè)試

啟動(dòng)2個(gè)提供者和1個(gè)消費(fèi)者服務(wù)

瀏覽器反復(fù)訪問(wèn) http://localhost:8400/consumer/payment/nacos 可以看到會(huì)輪詢請(qǐng)求提供者服務(wù)的不同實(shí)例

之所以可以實(shí)現(xiàn)負(fù)載均衡冗栗,是因?yàn)閚acos的依賴默認(rèn)引入了ribbon

Nacos作為配置中心

新建module
pom.xml
<dependencies>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
  </dependencies>
bootstrap.yml
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.138.135:8848 # Nacos服務(wù)注冊(cè)中心地址
      config:
        server-addr: 192.168.138.135:8848 #Nacos作為配置中心地址
        file-extension: yaml #指定yaml格式的配置
#        group: DEFAULT_GROUP
#        namespace: eeba7661-6b5e-46c6-aa45-5df57f48091f


# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml

# nacos-config-client-test.yaml   ----> config.info
application.yml
spring:
  profiles:
    active: dev # 表示開(kāi)發(fā)環(huán)境
    #active: test # 表示測(cè)試環(huán)境
啟動(dòng)類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ConfigApplication3377 {

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

}
測(cè)試controller
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope // 支持Nacos的動(dòng)態(tài)刷新功能
public class TestController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

Naocs的配置文件的dataId命名規(guī)則:${prefix}-${spring.profile.active}.${file-extension}

如:nacos-config-client-dev.yaml

這里的后綴應(yīng)該是yaml而不是yml

  • prefix 默認(rèn)為 spring.application.name 的值,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置供搀。
  • spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile隅居,詳情可以參考 Spring Boot文檔注意:當(dāng) spring.profiles.active 為空時(shí)趁曼,對(duì)應(yīng)的連接符 - 也將不存在军浆,dataId 的拼接格式變成 ${prefix}.${file-extension}
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置挡闰。目前只支持 propertiesyaml 類型

在控制面板中配置一個(gè)yaml文件乒融,用于測(cè)試

配置內(nèi)容如下:

然后啟動(dòng)該服務(wù),就會(huì)自動(dòng)去讀取 nacos-config-client-dev.yaml的配置內(nèi)容

訪問(wèn):http://localhost:3377/config/info 可以看到配置信息

接著摄悯,在Nacos控制面板編輯配置內(nèi)容赞季,將version=1改為version=2

再訪問(wèn)http://localhost:3377/config/info 可以看到信息發(fā)生了改變,實(shí)現(xiàn)了自動(dòng)刷新功能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奢驯,一起剝皮案震驚了整個(gè)濱河市申钩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘪阁,老刑警劉巖撒遣,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異管跺,居然都是意外死亡义黎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門豁跑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)廉涕,“玉大人,你說(shuō)我怎么就攤上這事『桑” “怎么了宠纯?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)层释。 經(jīng)常有香客問(wèn)我婆瓜,道長(zhǎng),這世上最難降的妖魔是什么湃累? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任勃救,我火速辦了婚禮,結(jié)果婚禮上治力,老公的妹妹穿的比我還像新娘蒙秒。我一直安慰自己,他們只是感情好宵统,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布晕讲。 她就那樣靜靜地躺著,像睡著了一般马澈。 火紅的嫁衣襯著肌膚如雪瓢省。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天痊班,我揣著相機(jī)與錄音勤婚,去河邊找鬼。 笑死涤伐,一個(gè)胖子當(dāng)著我的面吹牛馒胆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凝果,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼祝迂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了器净?” 一聲冷哼從身側(cè)響起型雳,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎山害,沒(méi)想到半個(gè)月后纠俭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪慌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年柑晒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眷射。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妖碉,到底是詐尸還是另有隱情涌庭,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布欧宜,位于F島的核電站坐榆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冗茸。R本人自食惡果不足惜席镀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夏漱。 院中可真熱鬧豪诲,春花似錦、人聲如沸挂绰。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葵蒂。三九已至交播,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間践付,已是汗流浹背秦士。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留永高,地道東北人隧土。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乏梁,于是被迫代替她去往敵國(guó)和親次洼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Nacos 是什么? https://nacos.io/zh-cn/docs/what-is-nacos.html...
    大雪冬至?xí)r閱讀 3,143評(píng)論 0 0
  • 文章首發(fā)于微信公眾號(hào)《程序員果果》地址:https://mp.weixin.qq.com/s/H-rFegXVo_...
    程序員果果閱讀 1,674評(píng)論 0 38
  • 最近在做微服務(wù)項(xiàng)目中公司開(kāi)始使用Nacos遇骑,所以決定今天簡(jiǎn)單的學(xué)習(xí)入門卖毁。Nacos致力于是微服務(wù)注冊(cè)、發(fā)現(xiàn)和配置落萎。...
    非典型_程序員閱讀 4,209評(píng)論 4 7
  • 久違的晴天亥啦,家長(zhǎng)會(huì)。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí)练链,離放學(xué)已經(jīng)沒(méi)多少時(shí)間了翔脱。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評(píng)論 16 22
  • 今天感恩節(jié)哎媒鼓,感謝一直在我身邊的親朋好友届吁。感恩相遇错妖!感恩不離不棄。 中午開(kāi)了第一次的黨會(huì)疚沐,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,564評(píng)論 0 11