在学习Nacos的过程中,我也与大家分享下我的所学所得,如果有写的不好的地方欢迎大家指出。
目录
1. Nacos下载与启动
1.1 下载
由于官方下载地址在github上,如果嫌弃官网下载得太慢或者缺少梯子,也可以点击我下面的百度网盘分享链接下载。
1.2 启动
解压完成后进入bin目录下
在路径上输入cmd+回车,或者右键+在终端打开进入命令行窗口
输入启动命令(standalone代表着单机模式运行,非集群模式):
Linux:
sh startup.sh -m standalone
Windows:
startup.cmd -m standalone
出现以下界面一般就代表启动成功了
1.3 验证nacos服务是否启动成功
官方文档中推荐的是Linux环境下使用 tail -f 检查日志是否有成功启动的输出
不过对于初学者来说,一般使用的是windows系统,我们直接访问http://127.0.0.1:8848/nacos,出现以下页面即代表服务启动成功
2. SpringBoot整合Nacos注册服务
2.1 依赖管理
注意版本控制!注意版本控制!注意版本控制!
虽然nacos本身要求jdk8以上即可,但作为SpringCloudAlibaba的组件,想要引入Nacos那么首先必须引入SpringCloudAlibaba的bom文件控制版本,这里有一个非常值得注意的地方。
顺便提一下,SpringBoot3.x只支持jdk17及以上,各种版本控制须得自己小心。
不过,如果不想浪费时间在版本控制上,也有简便方法
没错!交给IDEA自己进行一个默认的配置就行!
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.0.2</spring-boot.version>
<spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC2</version>
</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>
2.2 yml配置
application.yml
spring:
application:
name: nacos-service #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册进的nacos的地址
namespace: public
group: DEFAULT_GROUP
namespace和group都是默认值,可不写。
2.3 主启动
还需要新添一个@EnableDiscoveryClient注解才能将该微服务注册进nacos。如果要配置NacosConfiguration也可以将该注解移动到配置类上
@SpringBootApplication
@EnableDiscoveryClient
public class NacosTestApplication {
public static void main(String[] args) {
SpringApplication.run(NacosTestApplication.class, args);
}
}
启动成功后刷新一下,即可在服务列表上查看新注册的微服务
在业务场景下,一般会存在消费者微服务通过Nacos远程调用生产者服务,考虑到Rest使用的不便性,一般是通过OpenFeign接口来进行远程调用微服务。(后续会另外写一篇文章介绍)
3 分组和命名空间管理
在上述yml配置文件中,有两个属性很多人可能有所疑惑:namespace和group,这与nacos不同环境下的微服务配置有关。
在实际开发中,通常一个系统会准备开发环境,测试环境,生产环境等多种配置,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的服务配置呢?
Nacos便提供了namespace+group+DataId三元确定一个服务配置的功能。
namespace:主要用来实现隔离,主要用于区分生产环境。
group:类似于JAVA中的包名,可以把不同的微服务划分到同一个分组里面去
DataId:服务名,类似于JAVA中的类名,与group逻辑上区分两个目标对象
在上述的yml文件中,三元确定的是一个服务或服务配置文件,不过一般用来隔离配置文件即可,无需配置多个环境下的微服务,基于此nacos与consul一样也支持对于所有微服务进行服务配置动态变更的功能。
新建命名空间:
即可在配置管理中切换命名空间命名文件并创建配置
4. Nacos服务配置中心
3.1 新增依赖
<!--bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>4.1.0</version>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0-RC2</version>
</dependency>
3.2 yml配置
在服务配置中心里,需要使用bootstrap.yml,在这里解释一下和application.yml的区别:
bootstrap.yml
:在Spring Boot应用程序启动时优先于application.yml
被加载。它主要用于配置Spring Cloud Config这样的外部配置中心,或者用于初始化Spring Cloud的上下文,比如服务注册与发现等。application.yml
:在Spring Boot应用程序启动时随后被加载,用于配置应用程序本身的属性和其他配置。
换而言之,加载顺序为:加载bootstrap.yml --> 程序启动--->加载application.yml -->启动完成
服务注册与发现的配置需要在应用程序启动初期就准备好,以便应用程序能够及时注册到Nacos服务器,并能够将配置信息加载到程序中,否则将无法成功读取Nacos中的配置信息,初始化失败。
因此Nacos的配置信息需要移动至bootstrap.yml中。
bootstrap.yml:
spring:
application:
name: nacos-service #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
namespace: Dev_Namespace
# nacos配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 因此本案例的DataID是:nacos-service-dev.yaml
application.yml:
server:
port: 8888
spring:
profiles:
active: dev # 表示开发环境
# active: prod # 表示生产环境
# active: test # 表示测试环境
3.3 新增配置文件
在Dev_Namespace下新增一个yaml文件,文件内容如下(如果想要创建新的group,直接修改group内容即可)
3.4 业务类
@RestController //支持配置信息动态刷新
@RefreshScope
public class TestController {
@Value("${config.info}")
private String configInfo;
@RequestMapping("/test/dev")
public String dev() {
return configInfo;
}
}
3.5 测试
成功读取Nacos中的配置信息。
修改nacos-service-dev.yaml配置信息
刷新访问
更新成功
3.6 回滚
Nacos也支持历史信息的回滚功能
可以通过查找配置信息,进行历史的回滚
回滚成功
5.总结
作为SpringCloudAlibaba的服务注册和配置中心,Nacos无疑是重中之重,只有配置好了Nacos才能完成后续微服务的开发。