微服务集群配置
当我在微服务中配置了集群的属性之后,微服务在 nacos 注册之后,nacos 的后台就会出现集群的特性。
配置信息示例
spring:
cloud:
nacos:
server-addr: 192.168.14.21:8848
discovery:
cluster-name: SH # 设置为杭州集群
nacos 后台显示特性
点击详情进入查看效果
在 order-service 中配置负载均衡的策略
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
这样当调用 order-service 的时候,如果 order-service 需要调用 user-service,那么会优先调用和 order-service 同一个集群的 user-service 微服务。
当然,我们也可以控制不同集群服务的上线和下线。
设置集群的权重
现在我们将 user-service 多开几个微服务实例,其中两个在杭州集群,一个在上海集群,由于在 order-service 中 建立了负载均衡策略,所以默认访问 order 服务的时候,会走杭州集群的两个user服务,此时编辑上海集群两个服务的实例权重,其中一个调为0.1,那么访问order 的时候,比重就是 10:1
实际用处
当某个服务的权重被调整为 0 时,这个服务将不会被访问到
这个的实际用处就是,当我们想上线某个新功能的时候,不需要等到半夜无人的时候了,可以将权重调整为 0,然后服务启动后,将权重设置一个很小的值,进行灰度测试。这样就能到达平滑升级的目的了。
设置环境隔离
环境隔离的目的好比平时开发的时候设置的不同的环境,比如开发环境、测试环境、生产环境。
- 在 nacos 控制台添加一个开发环境命名空间
- 在 order-service 中配置命名空间为刚才配置的dev环境的 id
- 此时,user 服务是在 public 命名空间内,而 order 服务是在 dev 命名空间内
此时访问 order 服务,由于 order 服务和 user 服务不在同一命名空间,所以环境产生了隔离,所以在 order 服务中,无法正常调用 user 服务
nacos配置中心
pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
新建 bootstrap.yml
spring:
application:
name: user-service
profiles:
active: dev
cloud:
nacos:
server-addr: 192.168.14.21:8848
config:
file-extension: yaml # 配置文件后缀名
当 spring 容器启动时,会优先加载 bootstramp.yml,然后再加载application.yml,如果在 bootstrap.yml文件中指定了激活的环境,比如 dev,那么还会加载 application0-dev.yml文件,后面加载的值,会覆盖前面的加载的相同的配置。
在 nacos 中配置中心配置属性
第一种自动更新配置(不推荐)
- 在xxxController的类文件上,添加@RefreshScope注解
- 使用@Value进行属性的自动注入
@Value("${pattern.dateformat}")
private String dateformat;
第二种方式(推荐)
使用属性配件文件的方式
@Component
@ConfigurationProperties(prefix = "pattern")
@Data
public class PatternProperties {
private String dateformat;
private String name;
}