Spring Cloud Alibaba Nacos Config与 Discovery使用

前言

前面我们学习了如何在Spring Boot中使用Nacos来管理配置,整体来说还是比较简单。

为了能够在Spring Cloud中更加方便的使用Nacos,今天介绍下在Spring Cloud中如何简单,快速,方便的使用Nacos。

使用

需要在项目中加入spring-cloud-starter-alibaba-nacos-config的Maven依赖。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    </dependencies>
</dependencyManagement>
<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-alibaba-nacos-config</artifactId>
        <version>0.9.0.RELEASE</version>
</dependency>

开始Config

在bootstrap.properties中配置Nacos的信息,切记是bootstrap.properties不是application.properties,原因你可以自己体验下.

# 应用名
spring.application.name=crtxr-gateway
#nacos地址(配置中心)
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#nacos地址(注册中心)
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 配置内容的数据格式
spring.cloud.nacos.config.file-extension=yaml
# 指定对应的环境
spring.profiles.active=dev

在 Nacos Spring Cloud 中,dataId 的完整格式如下:
ps:这里很容易踩坑(命名错误导致应用获取不到配置)

${prefix}-${spring.profile.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

然后我们在Nacos的后台创建一个配置,dataId为crtxr-gateway-dev.yaml

nacos: crtxr

测试代码:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController{

@Value("${nacos:false}") 
private String nacos;

@RequestMapping("/get")  
public String get(){      
       return nacos;  
    }
}

配置变更需要刷新的话记得加上@RefreshScope注解。加载对应环境的配置是根据spring.profiles.active的值进行加载,
方便的点在于不用启动时指定namespace来区分环境,而是跟Spring Boot中的spring.profiles.active进行了整合。这样的方式还是只有默认的namespace,只不过是通过data-id的命名规则来区分环境。

至此Config可以正常使用了


多Data-Id的使用

如果我们需要加载多个配置文件,可以用ext-config来配置(数组形式配置多个)

#这里我再加载一个prod环境的依赖(`配置内容的数据格式可以使用其他的`)
spring.cloud.nacos.config.ext-config[0].data-id=crtxr-gateway-prod.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true

共享配置

通过上面加载多个配置的实现,实际上我们已经可以实现不同应用共享配置了。但是Nacos中还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:

spring.cloud.nacos.config.shared-dataids=crtxr-gateway-sit.properties
spring.cloud.nacos.config.refreshable-dataids=crtxr-gateway-sit.properties

spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的Data Id在配置变化时,应用中可以动态刷新,多个Data Id之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新

配置加载的优先级

当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

在使用Nacos配置的时候,主要有以下三类配置:

A: 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
B: 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
C: 通过内部规则(spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.group这几个参数)拼接出来的配置
要弄清楚这几个配置加载的顺序,我们从日志中也可以很清晰的看到,我们可以做一个简单的实验:

#这里我再加载一个prod环境的依赖(配置内容的数据格式可以使用其他的)
spring.cloud.nacos.config.ext-config[0].data-id=${spring.application.name}-prod.properties
# 配置组(默认DEFAULT_GROUP)
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
#是否自动刷新
spring.cloud.nacos.config.ext-config[0].refresh=true

#共享配置DataIds
spring.cloud.nacos.config.shared-dataids=${spring.application.name}-sit.properties
#开启自动刷新
spring.cloud.nacos.config.refreshable-dataids=${spring.application.name}-sit.properties

根据上面的配置,应用分别会去加载三类不同的配置文件,启动应用的时候,将会在日志中看到如下输出:

2019-08-21 10:35:44.924  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
Loading nacos data, dataId: 'crtxr-gateway-sit.properties', group: 'DEFAULT_GROUP'
2019-08-21 10:35:44.928  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
Loading nacos data, dataId: 'crtxr-gateway-prod.properties', group: 'DEFAULT_GROUP'
2019-08-21 10:35:44.935  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
Loading nacos data, dataId: 'crtxr-gateway-dev.yaml', group: 'DEFAULT_GROUP'

后面加载的配置会覆盖之前加载的配置,所以优先级关系是:A < B < C

开始Discovery

在启动类添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApplication {

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

验证

  • 启动服务检查控制台是否有异常
  • 登录Nacos控制台查看注册上的服务列表了
image.png

至此Nacos最主要的两大功能演示完毕

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容