前言
心情不好的時候寫寫文章 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請求服務端端口,用於服務間同步等 |