Spring Cloud Nacos使用总结
Posted xushiyu1996818
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Nacos使用总结相关的知识,希望对你有一定的参考价值。
目录
Linux服务器上Nacos的集群配置cluster.conf
安装Nacos服务器
下载软件包,然后sh startup.sh -m standalone即可
服务发现与消费
服务发现与消费-添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>$latest.version</version>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
该依赖对生产者和消费者都适用
更多版本对应关系参考:版本说明 Wiki
服务发现-配置文件
配置服务提供者,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。
在 application.properties
中配置 Nacos server 的地址:
server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
或者bootstrap.yaml
中配置 Nacos server 的地址和应用名
server:
port:9001
spring:
cloud:
nacos:
config:
server-addr: 192.168.29.1:8848
file-extension: yaml
application:
name: nacos-p
之所以需要配置 `spring.application.name` ,是因为它是构成 Nacos 配置管理 `dataId`字段的一部分。
在 Nacos Spring Cloud 中,`dataId` 的完整格式如下:
$prefix-$spring.profiles.active.$file-extension
`prefix` 默认为 `spring.application.name` 的值,也可以通过配置项`spring.cloud.nacos.config.prefix`来配置。
`spring.profiles.active` 即为当前环境对应的 profile,详情可以参考 [Spring Boot文档](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html#boot-features-profiles)。 **注意:当 `spring.profiles.active` 为空时,对应的连接符 `-` 也将不存在,dataId 的拼接格式变成 `$prefix.$file-extension`
`file-exetension` 为配置内容的数据格式,可以通过配置项 `spring.cloud.nacos.config.file-extension` 来配置。目前只支持 `properties` 和 `yaml` 类型。
服务发现-注解
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication
public static void main(String[] args)
SpringApplication.run(NacosProviderApplication.class, args);
@RestController
class EchoController
@RequestMapping(value = "/echo/string", method = RequestMethod.GET)
public String echo(@PathVariable String string)
return "Hello Nacos Discovery " + string;
服务发现-Controller
@RestController
@RefreshScope
public class MainController
@Value("$xxoo")
private String userName;
@RequestMapping("/hello")
public String hello()
return "hello+:" + userName;
@RefreshScope注解能帮助我们做局部的参数刷新,但侵入性较强,需要开发阶段提前预知可能的刷新点,并且该注解底层是依赖于cglib进行代理
注意:服务启动前要先启动Nacos!!
服务消费-配置文件
在 application.properties
中配置 Nacos server 的地址:
server.port=8080
spring.application.name=service-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
服务消费-注解与Ribbon消费代码
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced
注解,开启 @LoadBalanced
与 Ribbon 的集成:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication
// 注意:这里生成resttemplate
@LoadBalanced
@Bean
public RestTemplate restTemplate()
return new RestTemplate();
public static void main(String[] args)
SpringApplication.run(NacosConsumerApplication.class, args);
@RestController
public class TestController
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) this.restTemplate = restTemplate;
@RequestMapping(value = "/echo/str", method = RequestMethod.GET)
public String echo(@PathVariable String str)
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
restTemplate.getForobject(arg1, arg2, arg3...);
第一个参数url表示被调用的目标Rest接口位置
1. url的第一部分是在Nacos中注册的服务提供者名称,如果多个服务提供者注册相同名称, Ribbon会自动寻找其中一个服务提供者并且调用接口方法。这个就是负载均衡功能。
2.url后半部是控制器的请求路径。
第二个参数是返回值类型
1. JavaBean类型或者JavaBean数组类型,如果控制器返回的是List集合,需要使用数组类型接收。
第三个参数是可变参数
1.是传递给url的动态参数,使用参数时候需要在url上需要使用(1)、(2)、(3)进行参数占位,这样传递的参数就会自动替换占位符。
nacos自带了ribbon,所以不用别的配置!
服务消费-运行
启动 ProviderApplication
和 ConsumerApplication
,调用 http://localhost:8080/echo/2018
,返回内容为 Hello Nacos Discovery 2018
。
配置管理
配置管理-添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>$latest.version</version>
</dependency>
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
更多版本对应关系参考:版本说明 Wiki
配置管理-配置文件
在 bootstrap.properties
中配置 Nacos server 的地址和应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
$prefix-$spring.profiles.active.$file-extension
例如xxx(spring的application的名字)-dev/test(如果没配就没有).properties/yaml
例如my-producer-dev.yaml
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
可以在application.properties里面设置spring.profiles.active=dev或者test等等
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 $prefix.$file-extension
可以在boostrap.properties里配置spring.cloud.nacos.config.file-extension=yaml或者properties
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
配置管理-注解
启动类要加入EnableDiscoveryClient注解
通过 Spring Cloud 原生注解 @RefreshScope
实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController
@Value("$useLocalCache:false")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get()
return useLocalCache;
配置管理-加入配置1
首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为example.properties,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"
运行 NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回内容是 true。
再次调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example.properties,内容为useLocalCache=false
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false"
再次访问 http://localhost:8080/config/get,此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了。
配置管理-加入配置2
配置管理-切换不同环境
DatalD方案
1.指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置,配置规则:默认空间+新建dev和test两个Datald:
a 新建dev配置DatalD (已经创建完成)
b 新建test配置DatalD
2.通过spring.profile.active属性就能进行多环境下配置文件的读取
3 配置文件弄多个,然后修改active属性,即可切换到对应配置文件
Group方案
根据之前的讲解我们都知道Group为分组默认是: DEFAULT_GROUP,所以现在我们就需要分出两组】一组是"Dev开发组",一组是“test测试组”
1.新建Group
DEV_GROUP
建立TEST_GROUP分组,同名的文件nacos-config-client-info.yaml
2.完成以上配置以后,接下来就需要通过bootstrap+application来配合完成,具体方式:
在config下增加一条Group的配置即可,可以配置为DEV_GROUP或TEST_GROUP
bootstrap:
application
注意:刚刚将profile改成info了,这个之后就不用变了
3 配置文件弄多个,同名,group不同,修改bootstrap的group属性,即可切换配置文件
Namespace空间方案
我们已经把DatalD方案和Group方案完成了,然后接下来我们来看一下Namespace (命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案
1 新建dev/test的命名空间
2 服务管理-服务列表页面查看
此时我们就可以切换对应的命名空间,然后再通过Group和DatalD来进行切换,如果想要切换命名空间,我们就需要通过命名空间ID来进行切换
2. 按照域名配置(Namespace+Group+Datald)编写
先通过namespace命名空间ID来确认使用的命名空间
单机模式支持mysql
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
1.安装数据库,版本要求:5.6.5+
2.初始化mysql数据库,数据库初始化文件:mysql-schema.sql
注意:先创建数据库nacos_config,然后在里面执行sql
3.修改nacos自己目录的conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql
这里表示更改Nacos数据库为本机MySql数据库
注意:这里需要注意几个点,一个是url地址需要改,另外数据库的用户和密码也需要更改,同时还有一个是官网上在db.url.0=jdbc:mysql这个属性上少了一个属性为serverTimezone=UTC需要我们手动添加l
测试
重启Nacos服务,此时之前所创建的Namespace+Group+DatalD将全部消失,因为这些数据是保存在之前Nacos内嵌的derby数据库中,现在使用的是本地的MySql数据库,此时我们可以添加配置测试,在查看数据库nacos_config中的config_info表,此时就会有新添加的配置内容
linux版本安装+集群配置
Nacos生产环境下需要搭建集群配置,那么这里我们预计需要: 1个nginx+3个Nacos注册中心+1个Mysql(对nginx和mysql进行简化)
linux安装
1.在官网下载NacosLinux版本: https://github.com/alibaba/nacos/releases
2.在Linux系统中解压此文件,并且把其中nacos目录拷贝到mynacos目录中
tar -zxvf nacos-server-2.0.3.tar.gz
3.打开nacos目录下的bin目录输入命令即可执行
sh startup.sh
更改Nacos启动命令配置原理
我们现在知道,想要启动Naocs只需要启动startup.sh命令即可,但是如果启动3个Nacos那?所以如果我们需要启动多个Nacos,就需要自行修改startup命令
集群配置
Linux服务器上Mysql数据库配置
1.在Linux系统上执行SQL脚本,具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可
create database nacos_config;
use nacos_config;
2.修改application.properties配置文件,但是修改之前我们最好做一个备份。
cp application.properties application.properties.init
3.这里的修改和我们之间的在win上的修改是完全一样的,所以我们只要打开这个文件,加上对应的内容即可
spring.datasource.platform=mysql
db.num=1
db.ur1.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTCl
db.user=root
db.password=123456
Linux服务器上Nacos的集群配置cluster.conf
1.这里开始正式配置集群,首先我们要更改cluster.conf这个配置文件,当然我们也需要备份,但是这里它的原始名称为: cluster.conf.example,我们需要把它保留同时复制出一个cluster.conf来进行更改
cp cluster.conf.example cluster.conf
2.具体配置内容,这里我们在配置集群的时候不能直接写127.0.0.1这样,这样分不清楚,所以我们需要知道具体的IP地址,我们可以通过:
在conf文件里,写入3个服务器对应的ip地址和端口号
ifconfig -a 查看具体ip地址
编辑Nacos的启动脚本startup.sh
1,编辑这个脚本的目的,是为了能够让我们在使用此命令启动的时候传入对应的端口号参数,这样携带着具体端口号参数的启动就能启动具体的Nacos节点了,此脚本的为止在/nacos/bin中
2.核心点:传递不同的端口号启动不同的nacos实例,命令:
./startup.sh-p 3333
表示启动端口号为3333的nacos服务器实例,这里要和config保持一直。
3. 具体修改,依旧要备份:cp startup.sh starup.sh.bk
修改对应的配置文件为红框的部分(原来是没有port的那些东西)
Nginx配置
1.我们需要找到Nginx的配置文件,然后做备份
cd /usr/local/nginx
cp nginx.conf nginx.conf.bk
2. 修改nginx.conf
修改成下面红框那样,监听1111端口
测试启动
启动Nacos
1.这里注意,我们在启动之前必须要保证JDK环境变量配置好,同时保证以上配置没有问题,具体启动命令:
./startup.sh -o 3333
./startup.sh -o 4444
./startup.sh -o 5555
2.启动完成之后我们需要通过如下指令来测试Nacos集群是否正常启动,数量为3
ps -eflgrep nacos|grep -v grep Iwc -1
3 访问具体地址 xxx.xxx.xxx.xxx:3333/nacos,出现即可
启动Nginx
1.首先进入到Nginx目录下,启动Nginx,同时要带着我们设置过得配置文件启动
cd /usr/local/nginx/sbin
./nginx -c /usr/local/nginx/conf/nginx.conf
2.通过访问Nginx来测试是否能够访问到Nacos,在win系统浏览器网址上输入:
192.168.124.133:1111/nacos
集群添加配置
1.在Nacos平台上添加配置
2. 在数据库中检查是否有这一条配置,如果有表示成功添加
配置微服务为Linux版Nacos集群并注册进Nacos
1.我们以9002为例,此时我们要修改application.yaml文件,把之前的Nacos端口换成Nacos集群
2,配置完成启动服务,我们就可以在Naocs平台上看贝对应的微服务了,此时表示服务注册成功
Spring Cloud Alibaba Nacos集成
主项目链接:https://gitee.com/java_wxid/java_wxid
项目架构及博文总结:
- 点击:【使用Spring Boot快速构建应用】
- 点击:【使用Spring Cloud Open Feign基于动态代理动态构造请求实现与其他系统进行交互】
- 点击:【使用Spring Cloud Hystrix实现服务容错、熔断、降级、监控】
- 点击:【使用Spring Cloud Ribbon以库的方式集成到服务的消费方实现客户端负载均衡】
- 点击:【使用Spring Cloud Gateway作为API网关服务进行请求拦截、服务分发、降级、限流】
- 点击:【使用Spring Cloud Security Oauth2作为微服务统一认证中心实现用户认证和授权访问】
- 点击:【使用Spring Cloud Stream作为消息驱动用于动态的切换中间件】
- 点击:【使用Spring Cloud Skywalking基于字节码注入通过探针方式进行链路追踪、分布式追踪、性能指标分析、应用和服务依赖分析
- 点击:【使用Spring Cloud Alibaba Nacos实现服务注册/发现/续约/剔除/下线、心跳检测、服务配置管理、基于长轮训机制实现配置动态变更】
- 点击:【使用Spring Cloud Alibaba Seata作为对项目代码无入侵的分布式事务解决方案】
- 点击:【使用Spring Cloud Alibaba Sentinel实现高可用流量防护】
- 点击:【使用Apache ShardingSphere作为关系型数据库中间件实现分库分表、读写分离】
- 点击:【使用Apache Mybatis作为持久层框架用于定制化SQL、存储过程以及高级映射】
- 点击:【使用Redis作为高性能分布式缓存数据库】
- 点击:【使用ElasticSearch全文搜索】
- 点击:【使用MongoDB非关系型数据库】
- 点击:【使用xxl-job作为分布式任务调度平台】
- 点击:【使用Elasticsearch + Logstash + Kibana作为日志收集系统】
- 点击:【使用Apifox作为API文档、API调试、API Mock、API自动化测试】
- 点击:【使用Apache Spark作为基于内存计算的大数据分析引擎用于批处理、交互式查询】
- 点击:【使用ETL工具将数据源抽取到HDFS作为高可靠、高吞吐量的分布式文件系统存储,通过Hive清洗、处理和计算原始数据,Hive清洗处理后的结果,将存入Hbase,海量数据随机查询场景从HBase查询数据】
- 点击:【使用领域驱动DDD设计和设计模式进行开发】
- 点击:【使用Netty基于Java NIO封装的高性能的网络通信框架】
- 点击:【使用k8s、docker、docker-compose、宝塔面板进行环境搭建和部署】
- 点击:【使用Vue渐进式JavaScript框架作为适用场景丰富的Web前端框架】
- 点击:【分享人才筛选、工作分配、高效办公、项目推动等团队管理经验】
项目模块:
前期规划,实现部分
java_wxid
├── demo // 演示模块
│ └── 模块名称:spring-boot-demo模块 //Spring Boot快速构建应用(已实现并有博文总结)
│ └── 模块名称:spring-cloud-alibaba-nacos-demo模块 //Spring Cloud Alibaba Nacos集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-open-feign-demo模块 //Spring Cloud Open Feign集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-hystrix-demo模块 //Spring Cloud Hystrix集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-ribbon-demo模块 //Spring Cloud Ribbon集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-gateway-demo模块 //Spring Cloud Gateway集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-security-oauth2-demo模块 //Spring Cloud Security Oauth2集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-stream-demo模块 //Spring Cloud Stream集成(框架已搭建,待校验,待博文总结)
│ └── 模块名称:spring-cloud-skywalking-demo模块 //Spring Cloud Skywalking集成(框架已搭建,待校验,待博文总结)
│ └── 模块名称:spring-cloud-alibaba-seata-demo模块 //Spring Cloud Alibaba Seata集成(已实现并有博文总结)
│ └── 模块名称:spring-cloud-alibaba-sentinel-demo模块 //Spring Cloud Alibaba Sentinel集成(框架已搭建,待校验,待博文总结)
│ └── 模块名称:apache-shardingsphere-demo模块 //Apache ShardingSphere集成(已实现并有博文总结)
│ └── 模块名称:apache-mybatis-demo模块 //Apache Mybatis集成(已实现并有博文总结)
│ └── 模块名称:redis-demo模块 //Redis集成(已实现并有博文总结)
│ └── 模块名称:elasticsearch-demo模块 //ElasticSearch集成(框架已搭建,待校验,待博文总结)
│ └── 模块名称:mongodb-demo模块 //MongoDB集成(已实现并有博文总结)
│ └── 模块名称:xxl-job-demo模块 //xxl-job集成(框架已搭建,待校验,待博文总结)
│ └── 模块名称:apache-spark-demo模块 //Apache Spark集成
│ └── 模块名称:etl-hdfs-hive-hbase-demo模块 //ETL、HDFS、Hive、Hbase集成
│ └── 模块名称:ddd-design-mode-demo模块 //DDD、设计模式集成
│ └── 模块名称:netty-demo模块 //Netty集成
│ └── 模块名称:vue-demo模块 //前端vue集成
├── document // 文档
│ └── README.ch.md //中文文档
│ └── README.en.md //英文文档
系列文章:前期主要以demo项目为主,快速集成各种微服务相关的技术,帮助大家可以快速集成到自己的项目中,节约开发时间。后期则会以企业实战项目为主,致力于解决高并发、高可用、高性能、高可靠、海量数据等疑难问题,同时记录工作中遇到的技术难点、有技术亮点,项目会结合博客、视频辅助讲解,帮助大家查询是否遇到过同类型的问题。
提示:系列文章还未全部完成,后续的文章,会慢慢补充进去的。
文章目录
集成nacos需要先准备好nacos,这里从零开始搭建,首先准备好一台云服务器,我这里选择的是阿里云的CentOS 7.2 64位,然后开放安全组的指定端口,然后使用宝塔面板快速安装mysql,docker,使用docker容器快速安装nacos,最后创建项目进行测试nacos动态更新配置是否成功。
代码地址:https://gitee.com/java_wxid/java_wxid/tree/master/demo/spring-cloud-alibaba-nacos-demo
安装宝塔面板
去宝塔面板填写服务器ip和登录密码
如下(示例):
宝塔面板地址:https://www.bt.cn/new/download.html
选择仅安装宝塔面板,安装好之后会有一个链接和账户
面板地址:http://ip:端口/xxxxxx
用户名:xxxxx
密码:xxxxx
然后绑定手机号
安装mysql
由于nacos需要用到数据库,这里我需要提前安装好mysql,软件商店选择安装mysql
安全左侧栏目开放端口(一般需要修改默认端口,这里做演示就不改了)
如下(示例):
如果需要在宝塔面板里面链接mysql执行sql需要安装phpMyAdmin
如下(示例):
但是安装phpMyAdmin前还需要安装nginx和php-7.1|php-7.2|php-7.3|php-7.1|php-7.4|php-8.0|php-8.1|,安装完成之后就可以测试连接了
如下(示例):
如果root账号远程是报错,进入宝塔安装的phpmyadmin数据库界面,执行以下命令,重启mysql.
代码如下(示例):
#方法一:直接给root授予最大权限
# 授权root用户对所有数据库在任何ip都可以进行操作
grant all on *.* to root@'%' identified by '123456' with grant option;
# 刷新数据库
flush privileges;
#方法二:新建一个用户并授予最大权限
# 新建并授权jim用户对所有数据库在任何ip都可以进行操作
grant all on *.* to liaozhiwei@'%' identified by '123456' with grant option;
# 刷新数据库
flush privileges;
“root、liaozhiwei”是用户账号名;“123456”是mysql连接密码;“all”是指全部权限;“%指的是任何ip”,也可以把%替换成对应远程的ip地址
如果还是连接报错需要检查云服务器安全组端口是不是没开放
安装redis(非必选)
安装配置nacos和redis没有关系,这里为了后面项目可以用到redis,提前做好了安装配置,在软件商店搜索redis,点击安装,并且在首页显示方便修改配置
如下(示例):
去首页点击redis
如下(示例):
如下(示例):
然后重载配置,重启redis
检查云服务器安全组端口是否开发,就可以测试连接了
如下(示例):
安装docker
可以在左侧的Docker栏目安装docker
如下(示例):
安装nacos
代码如下(示例):
#搜索可以使用的镜像
docker search nacos
#拉取镜像
docker pull nacos/nacos-server
#推荐使用这种方式,可以连接自己的数据库
docker run --restart always -d -p 8848:8848 -p 9848:9848 -p 9849:9849 \\
--name nacos \\
--env MODE=standalone \\
--env SPRING_DATASOURCE_PLATFORM=mysql \\
--env MYSQL_SERVICE_HOST=106.14.132.94 \\
--env MYSQL_SERVICE_PORT=3306 \\
--env MYSQL_SERVICE_DB_NAME=nacos \\
--env MYSQL_SERVICE_USER=root \\
--env MYSQL_SERVICE_PASSWORD=JHWLXeT56iJiBwDG \\
nacos/nacos-server:latest
在数据库里面创建nacos库,把sql导入,sql地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
访问地址 默认账号密码是nacos/nacos(一般会删除,重新创建新用户)
http://ip:8848/nacos
配置nacos
创建命名空间
如下(示例):
创建配置文件nacos-config-dev.yaml
如下(示例):
填写内容:
内容如下(示例):
user:
name: liaozhiwei
age: 25
如下(示例):
创建spring-cloud-alibaba-nacos-demo项目
项目代码:https://gitee.com/java_wxid/java_wxid/tree/master/demo/spring-cloud-alibaba-nacos-demo
项目结构如下(示例):
创建一个springboot的项目,然后修改pom.xml
代码如下(示例):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring-cloud-alibaba-nacos-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-alibaba-nacos-demo</name>
<description>Demo project for Spring Boot</description>
<!-- 属性配置-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系-->
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 代表web模块,在这个模块中含了许多JAR包,有spring相关的jar,内置tomcat服务器,jackson等,这些web项目中常用的的功能都会自动引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Alibaba Nacos 配置 -->
<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>
<!-- 在SpringBoot 2.4.x的版本之后,对于bootstrap.properties/bootstrap.yaml配置文件
(我们合起来成为Bootstrap配置文件)的支持,其实这个jar包里什么都没有,就只有一个标识类Marker,
用来标识要开启Bootstrap配置文件的支持,由于父类用了2.5.6版本需要导入如下的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<!--
引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>$spring.boot.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring.cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>$spring.cloud.alibaba.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.4</version>
<configuration>
<source>$java.version</source>
<target>$java.version</target>
<encoding>$project.build.sourceEncoding</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建bootstrap.yml文件
代码如下(示例):
#bootstrap.yml优先级比application.yml优先级高
spring:
#prefix−spring.profile.active.$file-extension
#nacos会根据当前环境去拼接配置名称查找相应配置文件,
#示例:spring.application.name-spring.profiles.active-spring.cloud.nacos.config.file-extension
#获取到值:nacos-autoconfig-service-dev.yml
profiles:
#开发环境dev,测试环境test,生产环境prod
active: dev
application:
#配置应用的名称,用于获取配置
name: nacos-config
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: ip:8848
config:
#nacos配置中心地址
server-addr: ip:8848
#配置中心的命名空间id
namespace: 9e50b6d9-6c3d-4e7a-b701-10f085e4b98d
#配置分组,默认没有也可以
group: DEFAULT_GROUP
#配置文件后缀,用于拼接配置配置文件名称,目前只支持yaml和properties
file-extension: yaml
#配置自动刷新
refresh-enabled: true
#配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
#prefix: nacos-autoconfig-service-$spring.profile.active
# 配置编码
encode: UTF-8
username: nacos
password: nacos
修改启动类SpringCloudAlibabaNacosDemoApplication
代码如下(示例):
package com.example.springcloudalibabanacosdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.TimeUnit;
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudAlibabaNacosDemoApplication
public static void main(String[] args) throws InterruptedException
ConfigurableApplicationContext applicationContext =
SpringApplication.run(SpringCloudAlibabaNacosDemoApplication.class, args);
//配置的动态更新
while(true)
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
启动项目开始校验
控制台打印如下(示例):
修改nacos中的配置查看是否动态更新
配置修改如下(示例):
控制台打印发现已经修改成功了
控制台打印如下(示例):
以上是关于Spring Cloud Nacos使用总结的主要内容,如果未能解决你的问题,请参考以下文章
初识 Nacos(上) - 学习《Spring Cloud 服务发现新选择》