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