Nacos的搭建使用以及遇到的问题

环境准备

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

Nacos的搭建使用以及遇到的问题_第1张图片

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环境变量必须得配置成自己的

Nacos的搭建使用以及遇到的问题_第2张图片

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 端口不能省略。

你可能感兴趣的:(SpringCloud,spring,cloud,java,spring,boot,Nacos)