前言
心情不好的时候写写文章 2021-11-18 16:57:02 🐷事不顺!
最近准备搭建一个小型的微服务架构,在配置中心和注册中心选型上纠结了一些时间,
现在主流的有Eureka, Consul, Nacos 。由于Eureka不再维护,Consul之前也有一些不好的争议。
所以还是决定用Nacos,虽然我觉得Nacos也不怎样,文档写的跟💩一样,和我的文章有得一拼。
由于本人极度不喜欢SpringCloud,在我看来有点过度封装的感觉,不够轻量。
所以我用的是SpringBoot ,那么纠结的点又来了,是用nacos-config-spring-boot-starter来整合,还是自己基于nacos-client 去实现?
可能有些同学会疑问,这两种有啥差异?
简单来时nacos-starter就是基于springboot对naocs-client的封装,nacos-starter定义了一些配置项,
我们可以在application.properties上配置nacos服务的地址,这样nacos-starter在服务启动时候会帮我去做一些事情,注入配置,监听配置等。
整合步骤
springboot + nacos-config-spring-boot-starter
1.添加依赖
我用的spring boot版本是 2.3.12.RELEASE ,在新版本可能用不了了。因为springbook删除了一些废弃的类,要用只能等nacos-config-spring-boot-starter项目组的人更新维护了。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/>
</parent>
添加nacos-config-spring-boot-starter依赖,需要注意的是,Nacos2.0是使用grpc通信的,如果你的Nacos服务不是2.0以上的版本需要去找低版本的包
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
2.配置地址
在application.properties文件中添加Nacos服务的地址
nacos.config.server-addr=8.135.116.85:8848
3.代码示例
添加一个接收配置的类
@Component
@NacosPropertySource(dataId = "mycz.service", autoRefreshed = true)
@Getter
public class ServiceConfig {
@NacosValue(value = "${a:a}", autoRefreshed = true)
private String a;
@NacosValue(value = "${b:a}", autoRefreshed = true)
private String b;
}
写一个Controller测试
@RestController
public class TestController {
@Autowired
private ServiceConfig serviceConfig;
@RequestMapping("test")
@ResponseBody
public String demoGetConfig() {
return serviceConfig.getA();
}
}
在Nacos上添加配置
这时候我们请求一下Controller地址,查看返回值是否对于配置中心的配置的值,如果没问题那么恭喜你完成了第一步。
那么有时候我们只需要手动去获取单个配置,不需要用注解的方式接受,那么可以参考以下代码
@RestController
public class TestController {
@NacosInjected
private ConfigService configService;
@RequestMapping("test")
@ResponseBody
public String demoGetConfig() {
try {
String dataId = "test";
String group = "group";
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
} catch (Exception e) {
e.printStackTrace();
}
...
}
}
好了,到此一个简单的整合已经完成,可以愉悦地玩耍配置了。
一些坑
Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。如果使用外网连接,一定要开放另外两个端口!
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |