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 # 集群名称
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 优先选择策略
若设置为 NacosRule 策略,nacos 会根据服务发现的相关信息选择最优的服务:
权重越大被选择的可能性越大
服务的权重可以在 Nacos 服务详情中设置,如下图:
配置文件是根据命名空间隔离的
在 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>
拉取 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
注意服务发现的 namespace 与配置的 namespace 是分开配置的,默认都是在 public 空间
bootstrap 配置中 @@ 可能无法被 Maven 属性替代,在 pom.xml 中添加以下配置即可:
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
不同配置的优先级从高到低顺序如下:
nacos 环境配置 > nacos 默认配置 > 命令行参数 > bootstrap 配置 > application 配置
不同优先级之间,不同部分互补,相同冲突部分采用优先级高的配置
但也有例外,据我测试,服务名称(spring.application.name)与服务端口(server.port)是命令行参数的优先级最高
另外,服务端口虽然能通过拉取 nacos 配置设置,但在服务启动后端口号无法变更,所以服务端口不会受热更新影响
在 nacos 配置列表可以编辑已有的配置
如果配置正在被服务使用,配置更改后会立即更新作用到服务,这就是热更新