SHO酱的Blog

SHO酱的Blog

SpringBoot & SpringCloud 使用Nacos注册中心和配置中心说明

2021-05-24

版本

由于在 Spring 架构中版本较多,而且 SpringBoot 与 Spring Cloud 版本需要对应使用,且与 Spring Boot 或 Spring Cloud 搭配使用的一些框架(如:alibaba)也有较强的版本匹配关系,所以配置项目所使用的环境版本说明是必要的。

  • Java:zulu11.45.27-ca-jdk11.0.10-win_x64
  • SpringBoot:2.4.6
  • SpringCloud:2020.0.2
  • com.alibaba:fastjson:1.2.75
  • com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2021.1
  • com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2021.1
  • Nacos:2.0.0

项目的开发和部署结构

整个项目大概就是如下图的样子,由Nacos统一配置和管理SpringBoot应用服务(包括网关、权限服务接口、应用服务接口等)
项目结构

Nacos 相关配置

启动 Nacos

在开发环境中使用标准的单例模式启动

startup.cmd -m standalone

Nacos 注册发现服务配置

依赖

在 pom 文件中添加对Nacos发现服务的支持。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

如果要使用 bootstrap.yml 配置参数配置文件,测需要引入以下依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

配置

在万能的万维网上,配置的形式千奇百怪;有需要添加启用配置的,有需要再Application里添加启用注解的;这些也许是不同版本造成的。
但在SpringBoot 2.4.6和SpringCloud 2020.0.2中,只需要引入依赖,并配置Nacos的地址和端口就可以了,但一定要注意版本匹配,这里用到的spring-cloud-starter-alibaba-nacos-discovery是2021.1版本。
bootstrap.yml:

spring:
  profiles:
    active: dev
  application:
    name: gateway #定义应用名称
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

指定 Nacos 注册服务时的IP

服务器或PC有多个网卡(包括虚拟网卡),由于网卡的顺序不同,可能会导致服务启动后在注册服务时,服务的 IP 地址无法与 Nacos 通信,这时就需要指定注册服务时的 IP 地址。

有三种方法

  • 指定 IP 地址
spring.cloud.nacos.discovery.ip = 10.2.11.11
spring.cloud.nacos.discovery.port = 9090
  • 指定 IP 网段
spring.cloud.inetutils.preferred-networks = 10.2.11
  • 连接时忽略网卡
spring.cloud.inetutils.ignored-interfaces[0]=eth0     # 忽略网卡,eth0
spring.cloud.inetutils.ignored-interfaces=eth.*     # 忽略网卡,eth.*,正则表达式

Nacos 自动配置服务配置

依赖

在 pom 文件中添加对Nacos配置服务的支持。

<!-- 在上面一节已经提到过,但这里还需要强调一下,一定要引入下面这条 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.1</version>
</dependency>

【注意】这里一定要引入 spring-cloud-starter-bootstrap,否则项目中 bootstrap.yml 是不起作用的。

配置

spring:
  profiles:
    active: dev
  application:
    name: gateway #定义应用名称
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

Nacos上创建配置信息

启动Nacos服务后,通过 http://localhost:8848/nacos 访问,在【配置管理】 --> 【配置列表】中点击“+”加号,添加配置。
nacos配置中心1

在 【Data ID】中输入配置的名称,名称的命名规则为${application.name}-${profiles.active}.${扩展名}
【配置格式】选在 YAML 或 Properties,Nacos配置中心目前仅支持这两种格式;
输入【配置内容】,点击发布。
nacos配置中心2