登录
原创

nacos与springcloud的融合

发布于 2024-09-02 阅读 502
  • 后端
原创

微服务集群配置

当我在微服务中配置了集群的属性之后,微服务在 nacos 注册之后,nacos 的后台就会出现集群的特性。

配置信息示例

spring:
  cloud:
    nacos:
      server-addr:  192.168.14.21:8848
      discovery:
        cluster-name: SH # 设置为杭州集群

nacos 后台显示特性

image.png
点击详情进入查看效果
image.png
image.png

在 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
image.png
image.png
image.png
image.png

实际用处

当某个服务的权重被调整为 0 时,这个服务将不会被访问到
这个的实际用处就是,当我们想上线某个新功能的时候,不需要等到半夜无人的时候了,可以将权重调整为 0,然后服务启动后,将权重设置一个很小的值,进行灰度测试。这样就能到达平滑升级的目的了。

设置环境隔离

环境隔离的目的好比平时开发的时候设置的不同的环境,比如开发环境、测试环境、生产环境。

  1. 在 nacos 控制台添加一个开发环境命名空间
    image.png
  2. 在 order-service 中配置命名空间为刚才配置的dev环境的 id
    image.png
  3. 此时,user 服务是在 public 命名空间内,而 order 服务是在 dev 命名空间内
    image.png
    image.png
    此时访问 order 服务,由于 order 服务和 user 服务不在同一命名空间,所以环境产生了隔离,所以在 order 服务中,无法正常调用 user 服务
    image.png
    image.png

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 中配置中心配置属性

image.png

第一种自动更新配置(不推荐)

  1. 在xxxController的类文件上,添加@RefreshScope注解
  2. 使用@Value进行属性的自动注入
@Value("${pattern.dateformat}")
private  String dateformat;

第二种方式(推荐)

使用属性配件文件的方式

@Component
@ConfigurationProperties(prefix = "pattern")
@Data
public class PatternProperties {
    private String dateformat;
    private String name;
}

评论区

眉上的汗水,眉下的泪水,你总要选择一样

0

0

0

举报