Alibaba Nacos 快速入门
概览
- Nacos 安装,基础概念熟悉
- Nacos 注册中心使用,配置中心的使用
- 结合 @RefreshScope 实现配置文件的动态刷新
Nacos 是什么?
https://nacos.io/zh-cn/docs/what-is-nacos.html
-
官方介绍
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
-
核心特点:
既可以是注册中心也可以是配置中心
-
Nacos 有几个基础概念
- namespace 命名空间
- Group 配置分组
- DataID 具体的配置文件名称,例如: application-dev.yml
一般推荐使用namespace来区分不同的项目或环境。不同 namespace 或者不同 Group 之间的配置与服务都是隔离的。
怎么用?
-
文档与代码
Nacos官方Git地址:https://github.com/alibaba/nacos
Nacos官方文档地址:https://nacos.io/zh-cn/docs/
2.1 快速开始 – 安装 Nacos Server
https://nacos.io/zh-cn/docs/quick-start.html
-
2020-08 : 当前推荐的稳定版本为 1.3.1 。
下载源码或者安装包
可以通过源码和发行包两种方式来获取 Nacos。
-
从 Github 上下载源码方式
git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/ // change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin
-
下载编译后的压缩包方式
-
您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。
unzip nacos-server-
v
e
r
s
i
o
n
.
z
i
p
或
者
t
a
r
−
x
v
f
n
a
c
o
s
−
s
e
r
v
e
r
−
version.zip 或者 tar -xvf nacos-server-
version.zip或者tar−xvfnacos−server−version.tar.gz
cd nacos/bin
-
启动服务器
-
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):sh startup.sh -m standalone
-
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
-
Tips:
- 如果想修改JVM参数,那么直接修改 startup.sh 文件即可。
- 如果想修改 Nacos 的端口: 安装目录: /nacos/conf/application.properties 文件中修改即可
进入控制台
-
http://127.0.0.1:8848/nacos/index.html
-
默认的用户名密码为: nacos/nacos
2.2 在 Spring Cloud 中使用 Nacos
-
使用Nacos配置中心
-
客户端依赖
-
parent.xml – 采用公共版本依赖管理的方式
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR4</version> <type>pom</type> <scope>import</scope> </dependency> <dependencyManagement> <dependencies> <!--spring cloud alibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.0.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependencies> <dependencyManagement>
-
my-demo.xml
<!--配置中心客户端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
注意: 关于 SpringCloudAlibaba 跟 SpringCloud 跟 SpringBoot 的版本是有对照关系的
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
-
-
首先必须配置下面这两个配置项
spring.application.name=nacos-demo # Nacos 服务器的地址和端口 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
-
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
-
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
p
r
e
f
i
x
−
{prefix}-
prefix−{spring.profile.active}.${file-extension}
-
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
-
spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 – 也将不存在,dataId 的拼接格式变成
p
r
e
f
i
x
.
{prefix}.
prefix.{file-extension}
-
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
-
-
以上面的例两行配置为例: 此时将会加载 nacos 中 默认(public) 命名空间下的, DEFAULT_GROUP 分组下的 DataID 为 nacos-demo.properties 文件。
-
-
-
Nacos 默认支持动态配置更新功能
-
可以使用 @RefreshScope 来使用动态刷新的配置项
-
FilterIgnorePropertiesConfig
@Data @Configuration @RefreshScope @ConditionalOnExpression("!'${ignore}'.isEmpty()") @ConfigurationProperties(prefix = "ignore") public class FilterIgnorePropertiesConfig { /** * 放行url,放行的url不再被安全框架拦截 */ private List<String> urls = new ArrayList<>(); }
-
application.yaml
# 直接放行URL ignore: urls: - /actuator/ - /auth/login
-
此时在Nacos控制台,修改 application.yaml 中对应的配置项后,点击发布按钮,客户端本地的配置就会被刷新。
-
-
-
注意: 配置文件的优先级
-
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
当三种方式共同使用时,他们的一个优先级关系是:A < B < C
-
-
-
使用Nacos注册中心
-
依赖配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
启动一个 Provider 应用
-
在 bootstrap.properties 中或者 application.properties 中配置
server.port=8081 spring.application.name=nacos-producer spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
-
应用程序启动类添加 @EnableDiscoveryClient 注解。
@SpringBootApplication @EnableDiscoveryClient public class NacosProviderDemoApplication { public static void main(String[] args) { SpringApplication.run(NacosProducerDemoApplication.class, args); } @RestController public class EchoController { @GetMapping(value = "/echo/{string}") public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } } }
-
启动后,就可以在 Nacos 控制台上看到这个服务了
-
-
-
示例-客户端配置Nacos注册中心与配置中心
-
pom.xml
<!--注册中心客户端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--配置中心客户端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
bootstrap.yml
server: port: 7002 spring: application: name: @artifactId@ cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: sms-dev # 设置 nacos client 使用这个 ip 注册到 nacos server , 若不配置则会自动探测。 #ip: 192.160.22.22 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml namespace: sms-dev group: DEFAULT_GROUP shared-configs: - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} group: @nacos.group@ refresh: false profiles: active: @profiles.active@
-
常见问题
- 导入配置时提示: “导入失败! 未读取到合法数据,请检查导入的数据文件“
https://blog.csdn.net/UserFrank/article/details/112767028
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15263.html