Nacos注册中心+配置管理

nacos安装

  1. 下载安装包
    官方下载地址
  2. 修改配置
    配置文件:{nacos_home}/conf/application.properties
# 指定端口号
server.port=8848
# 指定数据库类型
spring.datasource.platform=mysql
# 数据库初始化使用脚本
spring.sql.init.platform=mysql
# 数据库数量
db.num=1
# 数据库相关连接配置
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&serverTimezone=UTC
db.user=your_login_name
db.password=your_login_password
# 开启权限校验,开启后登陆nacos服务端或客户端使用时都需要使用账号和密码
nacos.core.auth.enabled=true
# 集群相关身份认证,使用集群事,个单元服务的身份认证信息需要一致
nacos.core.auth.server.identity.key=your_key
nacos.core.auth.server.identity.value=your_value
  1. 初始化数据库
    在数据库中执行如下sql脚本,{nacos_home}/conf/[derby-schema.sql | mysql-schema.sql],根据不同的数据库选择不同的脚本文件。
  2. 启动服务
bash startup.sh -m standalone

若为云服务器,需要同时开启8848和9848端口;8848为配置文件中指定的nacos-server访问端口,9848为客户端与服务端的通讯端口,在nacos-server访问端口的基础上+1000。

nacos注册中心

nacos提供了注册中心的基本功能,包含服务注册、健康监测、动态 DNS 服务以及服务生命周期管理等功能。

基本概念

  1. 命名空间
    命名空间是nacos中的最大逻辑分组,需要在Nacos服务端创建,实际项目中可按照不同的运行环境prod、uat、sit、dev分为不同的命名空间;Nacos会为命名空间生成一个唯一的DataID,当客户端或服务分配权限关联命名空间是都使用DataID关联。
  2. 分组
    客户端定义的业务分组,实际项目中可以将相似业务模块的所有服务放在同一个业务分组;如后端交易业务可设置为交易分组,交易分组中可包含客户、产品、订单服务;分组用于业务隔离。
  3. 服务名称
    分布式架构中的单应用服务名称,同一服务的名称为集群。
  4. 服务注册中心
    存储服务实例和服务负载均衡策略的数据库。
  5. 权重
    实例级别的配置。权重为浮点数。权重越大,分配给该实例的流量越大。
  6. 健康检查
    以指定方式检查服务下挂载的实例 (Instance) 的健康度,从而确认该实例 (Instance) 是否能提供服务。根据检查结果,实例 (Instance) 会被判断为健康或不健康。对服务发起解析请求时,不健康的实例 (Instance) 不会返回给客户端。
  7. 健康保护阈值
    为了防止因过多实例 (Instance) 不健康导致流量全部流向健康实例 (Instance) ,继而造成流量压力把健康实例 (Instance) 压垮并形成雪崩效应,应将健康保护阈值定义为一个 0 到 1 之间的浮点数。当域名健康实例数 (Instance) 占总服务实例数 (Instance) 的比例小于该值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群中剩余健康实例 (Instance) 能正常工作。

使用

  1. 依赖添加
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${nacosVersion}")
  1. 配置
    Spring Boot项目中的application.yml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        namespace: 33da2973-26a9-429e-93c1-19e37d1d163f
        group: fund-trade
        username: fund_trade_nacos_dev
        password: ENC(qJJ4qlt9rEmdx1HrKjDXHJysZTm7XS9XSnGr848caZ83IdTzeyV/+w==)

nacos配置管理

Nacos提供配置管理功能,提供统一的配置平台,用于对应用配置做动态更新、版本迭代。实际项目中如Redis、Fastftp、Seata、Mysql等相关通用配置,可在Nacos配置中心中统一做配置管理。
Nacos配置管理同时提供了配置热更新的功能,避免了修改配置文件后需要重启应用服务才能生效的问题。(需要使用@RefreshScope)。

使用

  1. 依赖添加
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:${nacosVersion}")
  1. 配置修改
    Spring Boot项目中的application.yml
spring:
  application:
    name: trade-server
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: 33da2973-26a9-429e-93c1-19e37d1d163f
        group: fund-trade
        username: fund_trade_nacos_dev
        password: fund_trade_nacos_dev@123
		# spring boot:3.x中有兼容问题,需要开启
        import-check:
          enabled: false
  config:
    import:
### 	 指定映射的Nacos配置管理中的配置文件名称,当前示例为:trade-server-dev.yaml。除名称外,还需要与当前配置文件的namespace、group一致
      - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
      - optional:nacos:${spring.application.name}-common.properties
  1. 在Nacos配置管理中创建配置文件
    注意配置文件所属命名空间、分组和文件名,示例对应文件如下图:
    image
  2. 开启配置自动更新
    在需要使用自动更新的Bean类上使用@RefreshScope注解,则Bean中使用到了配置文件中的属性会响应配置文件的更新。
@Component
@RefreshScope
public class TradeController {

    @Value("${test.prop.name}")
    private String testName;
}

如上述示例中的testName,当配置文件中的test.prop.name属性变更时,程序中的testName值会自动更新。

posted @ 2024-03-31 00:10  周仙僧  阅读(74)  评论(0编辑  收藏  举报