SpringCloud集成服务注册配置管理中心Nacos

引言:

SpringCloud Alibaba 系列目录

一、搭建SpringCloud工程,请前往:保姆级教程构建SpringCloud工程(图文结合)
二、集成服务注册配置管理中心Nacos,请前往:SpringCloud集成服务注册配置管理中心Nacos
三、集成HTTP客户端工具OpenFeign,请前往:SpringCloud集成HTTP客户端工具OpenFeign
四、集成统一网关SpringCloud Gateway,请前往:SpringCloud集成微服务API网关Gateway(详解)

一、选择Nacos版本

我的项目中的SpringcloudAlibaba 版本为SpringCloudAlibaba 2021.0.4.0

根据SpringCloudAlibaba版本选择合适的Nacos版本
" https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 " 中找到 组件版本关系。
如下图: 找到到SpringCloudAlibaba 2021.0.4.0 版本所对应的 Nacos 组件版本为 2.0.4
在这里插入图片描述

二、引入Nacos服务注册与发现客户端依赖

在payment和order服务的pom文件中增加

      <!-- nacos客户端依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

修改 Payment和Order服务的yml配置文件
server-addr 可以直接配置在nacos下 代表注册中心和配置中心地址。
配置在discovery 下 表示注册中心地址 ,单独配置时优先级大于配置nacos下的
配置的集群为 HZ

spring:
    cloud:
        nacos:
          # Nacos服务地址
          server-addr: localhost:8848
          # Nacos的服务注册与发现
          discovery:
            # Nacos服务地址
            #server-addr: localhost:8848
            # 配置集群名称,也就是机房位置,例如:HZ 杭州
            cluster-name: HZ
            # Nacos可视化命名空间ID
    		# namespace:

三、启动Nacos

进入Nacos的bin目录下
在cmd 窗口下执行 startup.cmd -m standalone 使Nacos以单机的形式启动
在这里插入图片描述

启动Order和Paymen服务,进入Nacos可视化查看 服务管理 --> 服务列表
在这里插入图片描述查看paymentservice详情 ,所属集群为 HZ
在这里插入图片描述

四、环境隔离 - namespace

在Nacos控制台 - 命名空间 -> 新建命名空间 可以创建namespace,用来隔离不同环境
在这里插入图片描述
保存后,可以看到刚创建的命名空间.
在这里插入图片描述
配置命名空间ID,配置的是Id不是名称

  cloud:
    nacos:
      # Nacos服务地址
      server-addr: localhost:8848
      # Nacos的服务注册与发现
      discovery:
        # Nacos服务地址
        server-addr: localhost:8848
        # 配置集群名称,也就是机房位置,例如:HZ 杭州
        cluster-name: HZ
        # Nacos可视化命名空间ID
        namespace: cdd2a801-3280-4476-8362-d46318aac1a3

五、临时实例和非临时实例

  1. 非临时实例
    • 非临时实例是常驻的服务实例,它们注册到服务注册中心后会持续存在,直到手动注销或因其他原因被删除。
    • 当一个非临时实例注册到服务注册中心时,它会在注册表中保持活动状态,直到主动注销。
    • 非临时实例通常用于长期运行的服务,例如应用程序、数据库等。
  2. 临时实例
    • 临时实例是一种临时性的服务实例,它们注册到服务注册中心后会自动删除,在一定时间内没有续约时会被认为失效并被自动注销。
    • 当一个临时实例注册到服务注册中心时,它需要定期发送心跳包来告知注册中心它仍然存活,如果一段时间内没有收到心跳包,注册中心会将该实例标记为失效并将其删除。
    • 临时实例通常用于临时性任务或短期运行的服务,例如定时任务、临时节点等。

区别:

  • 生命周期:非临时实例是长期存在的,而临时实例是临时性的,会在一定时间内失效并被删除。
  • 注册行为:非临时实例需要手动注销,而临时实例会在一定时间内没有续约时被自动注销。
  • 使用场景:非临时实例适用于长期运行的服务,而临时实例适用于临时性任务或短期运行的服务。

一般使用临时实例,非临时实例会一直占用服务器资源,即使实例并不活跃也会一直占用,导致资源浪费

 cloud:
    nacos:
      discovery:
        ephemeral: false   # 设置为非临时实例

六、集成Nacos统一配置管理中心

在Payment和Order服务的pom文件中增加 统一配置管理中心客户端依赖

     <!-- nacos 统一配置管理中心客户端依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在orderservice中的resource目录添加一个bootstrap.yml,这个文件是引导文件,优先级高于application.yml

spring:
  application:
    # 服务名称
    name: orderservice
  profiles:
    active: dev

  cloud:
    nacos:
      # Nacos服务地址
      server-addr: localhost:8848
      # Nacos的服务注册与发现
      discovery:
        # Nacos服务地址
        server-addr: localhost:8848
        # 配置集群名称,也就是机房位置,例如:HZ 杭州
        cluster-name: HZ
        # Nacos可视化命名空间ID
        namespace: cdd2a801-3280-4476-8362-d46318aac1a3
      # Nacos的统一配置管理中心
      config:
        # 在 Nacos Spring Cloud 中,dataId 的完整格式如下:
        # ${prefix}-${spring.profiles.active}.${file-extension}
        # prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
        # spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
        # file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
        file-extension: yaml #配置文件后缀名
        prefix: orderservice
        namespace: cdd2a801-3280-4476-8362-d46318aac1a3

1.在Nacos控制台添加配置

在控制台 配置管理-> 配置列表 中新增 orderservice-dev.yaml 配置文件

在这里插入图片描述
配置填写完成后点击发布

在这里插入图片描述
在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

Nacos配置内容获取步骤:
在这里插入图片描述

2. 测试获取配置的属性和热更新

热更新:Nacos控制太改变配置内容,项目中能够实时感知并进行更新

Nacos配置更改后,微服务可以实现热更新,方式:

①通过@Value注解注入,结合@RefreshScope来刷新

②通过@ConfigurationProperties注入,自动刷新

注意事项:

•不是所有的配置都适合放到配置中心,维护起来比较麻烦

•建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置

/**
 * @author waves
 * @date 2024/5/20 15:37
 */
@RestController
@RequestMapping("/system/order")
@RefreshScope//在@Value注入的变量所在类加上这个注解,可以监听Nacos配置变更,实现热刷新,无需自动重启 第一种方式 ,方式二在PatternProperties.java
public class SysOrderController {

    @Value("${pattern.dateformat}")
    private String dateFormat;
    
    @GetMapping("/now")
    public String getNowTime(){
        return LocalDateTime.now().format(
                DateTimeFormatter.ofPattern(dateFormat, Locale.CHINA)
        );
    }
}


http://localhost:18088/orderservice/system/order/now
//测试结果:
	2024-05-22 19:23:39
    
//更改nacos配置文件
pattern:
  dateformat: yyyy年MM月dd日 HH:mm:ss
//发布之后在进行接口调用,不需要重启项目      
//测试结果:
      2024052219:24:26
//按照上述配置就能获取到Nacos控制台配置的内容了
          
          
//第二种获取Nacos控制台配置文件内容
/**
 * @author waves
 * @date 2024/5/22 11:26
 */
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {

    private String dateformat;
}

七、多环境配置共享

微服务启动时会从nacos读取多个配置文件:

l[spring.application.name]-[spring.profiles.active].yaml,例如:orderservice-dev.yaml

l[spring.application.name].yaml,例如:orderservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

多种配置的优先级:
在这里插入图片描述
多服务配置共享有两种方式:

spring:
  application:
    # 服务名称
    name: orderservice
  profiles:
    #环境
    active: dev
  cloud:
    nacos:
      # Nacos服务地址
      server-addr: localhost:8848
      # Nacos的服务注册与发现
      discovery:
        # Nacos服务地址
        server-addr: localhost:8848
        # 配置集群名称,机房位置,例如:HZ 杭州
        cluster-name: HZ
        # Nacos可视化命名空间ID
        namespace: cdd2a801-3280-4476-8362-d46318aac1a3
      # Nacos的统一配置管理中心
      config:
        # 方式一 多微服务之间共享的配置列表
        shared-configs:
          #要共享的配置文件Id
          -dataId: common.yaml
        # 方式二 多微服务之间共享的配置列表
#        extension-configs:
          #要共享的配置文件Id
#          -dataId: common.yaml

多种配置的优先级:

服务名-profile.yaml >服务名称.yaml > extension-config > shared-config > 本地配置

在这里插入图片描述

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧歌*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值