SpringBoot整合Nacos的一些方案


前言

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM