微服务部署下使用Nacos集成服务注册和发现,配置管理。

1、Spring Cloud整合Nacos注册中心

1.1、引入Nacos服务发现组件

1
2
3
4
5
<!-- nacos discovery 服务发现组件-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

1.2、下载Nacos Server并启动

  1. 下载Nacos Server 压缩包

https://github.com/alibaba/nacos/releases

  1. 启动 Server

进入解压后文件夹或编译打包好的文件夹,找到如下相对文件夹 nacos/bin,并对照操作系统实际情况之下如下命令,-m standalone表示单机模式启动。

1
2
3
4
# Linux/Unix/Mac 操作系统,执行命令 
sh startup.sh -m standalone
# Windows 操作系统,执行命令
startup.cmd -m standalone

1.3、配置Nacos server地址和微服务名称

  1. 为每个微服务都配置Nacos Server 地址

在每个微服务应用的 /src/main/resources/application.yml配置文件中配置 Nacos Server 地址。

1
2
3
4
5
6
7
8
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

application:
name: passjava-question

1.4、添加注解

为每个服务使用 @EnableDiscoveryClient 注解开启服务注册与发现功能。

1
2
3
4
5
6
7
8
9
10
@EnableDiscoveryClient
@MapperScan("com.jun.passjava.question.dao")
@SpringBootApplication
public class PassjavaQuestionApplication {

public static void main(String[] args) {
SpringApplication.run(PassjavaQuestionApplication.class, args);
}

}

1.5、访问Nacos Server后台

登录后台

http://localhost:8848/nacos/index.html#/login

用户名:nacos

密码:nacos

2、Spring Cloud整合Nacos配置中心

2.1、传统配置方式

  1. application.properties文件中定义两个配置:
1
2
member.nickname = "jun"
member.age = "18"
  1. 示例控制器中定义私有变量nickname和age,@value代表从配置中取值
1
2
3
4
5
@Value("${member.nickname}")
private String nickname;

@Value("$member.age")
private Integer age;
  1. 示例控制器中定义方法:获取nick和age的值
1
2
3
4
@RequestMapping("/test-local-config")
public R testLocalConfig() {
return R.ok().put("nickname", nickname).put("age", age);
}
  1. 测试结果

img

  1. 总结

从配置文件中获取配置。这种方式的缺点是什么呢?如果要修改配置参数,则需要重新启动服务。如果服务很多,则需要重启所有服务,非常不方便。

有没有什么办法不停服务修改配置而且使其生效呢?

答案:有的,用Spring Cloud Alibaba的Nacos 组件就可以完成。

2.2、引入Nacos config依赖

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.3、配置Nacos元数据

  1. 微服务下添加 /src/main/resources/bootstrap.properties 配置文件。

注意:bootstrap.properties 是系统级的,优先级高于其他配置文件, application.properties 是应用级别的,加载比较晚,其次是bootstrap.yml、application.yml,所以引入 Nacos 组件时,需要配置 bootstrap.properties

  1. 配置 Nacos Config 元数据。

需要配置Nacos的服务名,也就是对应Nacos管理平台的配置文件,和Nacos服务地址。

1
2
spring.application.name=nacos-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

2.4、Nacos后台新增配置

Data ID: nacos-demo.properties

Group: DEFAULT_GROUP

配置格式:

1
2
user.name="jun"
user.age=27

img

2.5、开启动态刷新配置

添加注解@RefreshScope开启动态刷新配置功能。

1
2
3
4
5
6
@RequestMapping("/test-local-config")
@RestController
@RefreshScope
public R testLocalConfig() {
return R.ok().put("nickname", name).put("age",age);
}

日志:

1
2
3
2023-09-27 10:59:06.646  INFO 13252 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [user.name]
2023-09-27 10:59:06.646 INFO 13252 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData : [fixed-127.0.0.1_8848] [notify-ok] dataId=nacos-demo.properties, group=DEFAULT_GROUP, md5=bd3c381399ca063d5ee908060b8c1afa, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@186a3635
2023-09-27 10:59:06.647 INFO 13252 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData : [fixed-127.0.0.1_8848] [notify-listener] time cost=2133ms in ClientWorker, dataId=nacos-demo.properties, group=DEFAULT_GROUP, md5=bd3c381399ca063d5ee908060b8c1afa, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@186a3635

user.name更新了,通知了nacos-demo服务,刷新了配置。对应的配置id为nacos-demo.properties,分组为DEFAULT_GROUP。监听器为com.alibaba.cloud.nacos.refresh.NacosContextRefresher

测试结果:

img

2.6、更多

命名空间、分组、多配置集用法。



本站总访问量