• SpringCloudAlibaba-微服务-Nacos服务配置


    Nacos 安装与部署:https://blog.csdn.net/Cey_Tao/article/details/127611559

    一、服务发现

    Nacos 的服务发现有三个主要区域,从大到小分别是:命名空间(namespace),分组(group),集群(cluster)

    默认分别为 public 命名空间,DEFAULT_GROUP 分组,DEFAULT 集群

    不同集群之间的服务可以相互访问,但不同分组或命名空间的服务不可发现

    服务发现在 spring.cloud.nacos.discovery 中配置,示例如下:

    spring:
      application:
        name: user-service	# 服务名称
      cloud:
        nacos:
          server-addr: @nacos.server-addr@	# nacos 注册中心地址
          discovery:
            namespace: namespace-dev # namespace 的 ip
            group: g1	# 分组名称
            cluster-name: ShenZhen	 # 集群名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    group 和 cluster-name 可以直接配置,namespace 需要先在 nacos 控制台新建命名空间,并得到命名空间的 id

    命名空间 id 可以自己填写,也可自动生成

    如下图:

    在这里插入图片描述

    二、负载均衡策略

    Nacos 依赖中也包含了 Ribbon 相关依赖,可以通过 Ribbon 来设置负载均衡策略

    默认策略为轮询访问

    示例如下,对 user-service 服务的访问设置负载均衡策略:

    user-service:	# 服务名称,为改服务设置负载均衡策略
      ribbon:
        #    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule	# 随机访问策略
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule	# nacos 优先选择策略
    
    • 1
    • 2
    • 3
    • 4

    若设置为 NacosRule 策略,nacos 会根据服务发现的相关信息选择最优的服务:

    1. 优先选择同一集群内的服务
    2. 同一集群内根据权重随机选择

    权重越大被选择的可能性越大

    服务的权重可以在 Nacos 服务详情中设置,如下图:

    在这里插入图片描述

    三、Naocs 管理配置

    新建配置

    配置文件是根据命名空间隔离的

    在 Nacos 配置列表中选择命名空间,可以添加配置

    在这里插入图片描述

    下面示例为 user-service 添加一个默认配置,配置内容为服务的日志等级

    Nacos 是根据服务名称查找对应的 Data ID,所以 Data ID 应该以服务名称为前缀

    在这里插入图片描述

    如果需要多环境配置,Data ID 中应加上环境名称后缀,如下:

    在这里插入图片描述

    拉取配置

    添加 nacos 服务发现和服务配置的依赖:

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    dependency>
    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    拉取 nacos 配置的相关属性要配置在 bootstrap 配置文件中

    必要的属性有服务名称,nacos 地址,配置格式

    在项目 resources 目录下新建 bootstrap.yml,配置示例如下:

    spring:
      application:
        name: user-service # 服务名称,要与 Data ID 前缀对应
      profiles:
        active: dev	# 启用环境
      cloud:
        nacos:
          server-addr: @nacos.server-addr@  # nacos 注册中心地址
          discovery:
            namespace: 6c1d9771-2afb-4a48-9ced-4bc21b2781c8 # 服务发现的命名空间 id
          config:
            file-extension: yaml  # 配置格式
            namespace: 6c1d9771-2afb-4a48-9ced-4bc21b2781c8 # 服务配置的命名空间 id
    #        group: DEFAULT_GROUP # 默认为 DEFAULT_GROUP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注意服务发现的 namespace 与配置的 namespace 是分开配置的,默认都是在 public 空间

    bootstrap 配置中 @@ 可能无法被 Maven 属性替代,在 pom.xml 中添加以下配置即可:

    <build>
        <resources>
            <resource>
                <directory>src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    不同配置的优先级

    不同配置的优先级从高到低顺序如下:

    nacos 环境配置 > nacos 默认配置 > 命令行参数 > bootstrap 配置 > application 配置

    不同优先级之间,不同部分互补,相同冲突部分采用优先级高的配置

    但也有例外,据我测试,服务名称(spring.application.name)与服务端口(server.port)是命令行参数的优先级最高

    另外,服务端口虽然能通过拉取 nacos 配置设置,但在服务启动后端口号无法变更,所以服务端口不会受热更新影响

    配置热更新

    在 nacos 配置列表可以编辑已有的配置

    如果配置正在被服务使用,配置更改后会立即更新作用到服务,这就是热更新

    在这里插入图片描述

  • 相关阅读:
    Spring事务和事务传播机制
    [FPGA] IIC读写EEPROM 的实现
    【每日一句】只出现一次的数
    Maven 从入门到精通
    Docker将本地的镜像上传到私有仓库
    这几个截图文字识别软件可以自动识别文字
    Leetcode 3122. Minimum Number of Operations to Satisfy Conditions
    window 下 达梦数据库的备份和还原
    焦炉加热系统简述
    容器镜像多架构支持介绍
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/127668566