环境准备
1、nacos版本:2.1.2,下载地址:https://github.com/alibaba/nacos/releases
2、JDK版本:jdk1.8.0_351,下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3、SpringBoot、SpringCloud、SpringCloudAlibaba版本
? 参考https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
SpringBoot版本 | spring.cloud.alibaba版本 | spring.cloud版本 |
---|
2.4.2 | 2021.1 | 2020.0.1 |
一、部署Nacos
1、下载地址:
https://github.com/alibaba/nacos/releases
2、解压
unzip nacos-server-2.1.2.zip 或者 tar -xvf nacos-server-2.1.2.tar.gz
cd nacos/bin
3、启动
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
访问:http://192.168.129.128:8848/
4、常用命令
服务注册
curl -X POST ‘http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080’
服务发现
curl -X GET ‘http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName’
发布配置
curl -X POST “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld”
获取配置
curl -X GET “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test”
5、关闭
sh shutdown.sh
二、项目使用
1、POM依赖
<!--nacos服务注册和配置文件-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--在SpringBoot 2.4.x的版本之后,对于bootstrap.properties/bootstrap.yaml配置文件
(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖或者使用spring.cloud.bootstrap.enabled=true -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2、bootstrap.yml文件配置
#开启nacos日志
logging:
level:
com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder: debug
#对应配置文件名称 ${spring.application.name}-${spring.profiles.active}.${file-extension}
spring:
profiles:
active: dev
application:
name: nacos-demo
cloud:
nacos:
#服务相关
discovery:
server-addr: 192.168.129.128:8848
#配置文件相关
config:
#enabled: false #完全关闭 Spring Cloud Nacos Config
server-addr: 192.168.129.128:8848
file-extension: yaml
group: DEFAULT_GROUP
namespace: 7f1a800b-6fb5-444e-baf9-ca17a7e3ce76 #不填默认public
3、在nacos控制台创建文件nacos-demo-dev.yaml
4、创建并启动应用
@SpringBootApplication
@EnableDiscoveryClient
public class NacosDemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosDemoApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :"+userName+"; age: "+userAge);
String env = applicationContext.getEnvironment().getProperty("current.env");
System.err.println("current.env value is " + env);
}
}
出现以下日志说明配置文件加载成功
2022-10-25 16:47:22.580 DEBUG 23088 — [ main] c.a.c.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: ‘nacos-demo-dev.yaml’, group: ‘DEFAULT_GROUP’, data: current.env: dev-env user: name: ‘哈哈’ age: 15
2022-10-25 16:47:22.584 INFO 23088 — [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo-dev.yaml,DEFAULT_GROUP’}, BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo.yaml,DEFAULT_GROUP’}, BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo,DEFAULT_GROUP’}]
出现以下日志说明服务注册成功
2022-10-25 16:47:26.230 INFO 23088 — [ main] com.alibaba.nacos.client.naming : [BEAT] adding beat: BeatInfo{port=9000, ip=‘192.168.129.1’, weight=1.0, serviceName=‘DEFAULT_GROUP@@nacos-demo’, cluster=‘DEFAULT’, metadata={preserved.register.source=SPRING_CLOUD}, scheduled=false, period=5000, stopped=false} to beat map. 2022-10-25 16:47:26.230 INFO 23088 — [ main] com.alibaba.nacos.client.naming : [REGISTER-SERVICE] public registering service DEFAULT_GROUP@@nacos-demo with instance: Instance{instanceId=‘null’, ip=‘192.168.129.1’, port=9000, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName=‘DEFAULT’, serviceName=‘null’, metadata={preserved.register.source=SPRING_CLOUD}} 2022-10-25 16:47:26.233 INFO 23088 — [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP nacos-demo 192.168.129.1:9000 register finished
项目启动成功之后,控制台会输入如下值:
user name :哈哈; age: 15 current.env value is dev-env
三、遇见的问题
1、ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!
在顶部添加第一环节中的JAVA_HOME,并修改启动方式为单列,其中java环境变量必须得配置成自己的
2、SpringBoot 不识别 bootstrap 文件
SpringBoot 2.4.x的版本之后添加依赖spring-cloud-starter-bootstrap才能识别
3、namespace 填写的是命名空间的ID不是名称
这个id在Nacos控制台命名空间导航栏的列表可以找到
4、加载不到配置文件
去Nacos控制台看一下配置文件Data Id是否正确
组成规则是:
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
?
{spring.application.name}-
spring.application.name?{spring.profiles.active}.${spring.cloud.nacos.config.file-extension},不要写错,大小写保持一致
如不指定环境则是nacos-demo.yaml,指定dev环境则是nacos-demo-dev.yaml
Note | ${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中。 |
---|
具体参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
5、连接配置中心的参数需要写在 bootstrap 里面,写在 application 里面无法连接配置中心
6、bootstrap 比 application 先执行,且内容无法覆盖,尽量用bootstrap文件
加载顺序:
bootstrap.yml` > `bootstrap.properties` > `application.yml` > `application.properties
一旦bootStrap.yml 被加载,则内容不会被覆盖,即便后期加载的application.yml的内容标签与bootstrap的标签一致,application 也不会覆盖bootstrap,而application.yml 里面的内容可以动态替换
7、Nacos Server地址注意
Note | nacos 的地址是本地的话,写127.0.0.1,不写localhost; 注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port 。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80 。 注意 80 端口不能省略。 |
---|
|