手把手从零搭建微服务项目Spring Cloud Alibaba--07、nacos配置中心

传统项目中,服务的配置都放在application.yml中。多环境则使用application-dev.yml、application-sit.yml、application-prod.yml的方式配置,再结合使用spring.profiles.active=dev来实现环境切换。

微服务项目中,各微服务可能有公用配置(如:mysql、redis、mq等),又有各微服务的私有配置(如:端口、微服务私有缓存等)。相同配置如果都直接配置在application.yml中,将会出现多出冗余,在修改配置时极易疏漏出错,此时通过nacos配置中心,即可实现公共配置一处配置,多服务使用,及多环境的切换。

本节将根据前面章节的两个微服务,配置通用配置mysql和多环境的切换。

1,引入nacos配置中心依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

spring cloud配置中心读取的默认配置文件为:bootstrap.yml,所以需要在resource下创建该文件。本示例使用的spring cloud alibaba版本和spring cloud版本均为最新版本: 2022.0.0,nacos2.x版本后,bootstrap.yml文件不再是默认spring cloud配置文件,故需要引入spring-cloud-starter-bootstrap依赖使用bootstrap.yml。不引入也可以把配置写在application.yml中。

2,添加bootstrap.yml

在配置bootstrap之前,先根据nacos的可视化界面解读需要配置的属性:

根据配置中心的界面可初步了解,属性有:Data Id, Group, 应用。再看看直接添加配置的页面:

通过还页面发现,还有文件的格式和内容。配置内容直接在这里写,项目中bootstrap.yml只配置读取的配置文件。

nacos配置中心使用需注意:nacas默认微服务的配置文件名和服务名相同,即在不做声明情况下,如本项目的order服务,spring.application.name=orderService,则nacos会默认查找读取Data Id为orderService.properties的配置

此处演示有公共配置和私有配置的情况,如下orderService的bootstrap.yml

spring:
  cloud:
    nacos:
      config:
        file-extension: yaml
        server-addr: localhost:8848
        namespace: public
        #        namespace: 8ff9945a-1771-49cb-84dd-0f1278eece50 # dev的命名空间
        name: orderService.yaml
        group: DEFAULT_GROUP # 使用默认则可省略

        extension-configs[0]:
          data-id: common.yaml
          group: DEFAULT_GROUP # 使用默认则可省略
          refresh: true

file-extension: 标识使用的配置文件格式

server-addr: 配置中心地址

namespace: 通过namespace实现多环境配置,此处配置的namespace id会在创建完namespace后自动生成,如下图直接在页面新增了开发和生产环境的命名空间,配置时需使用ID而非name

group: 分组。也可通过分组实现多环境,弊端是没有权限控制,可去官网查看使用详情,不多说明。使用默认分组可省略

prefix: 配置文件的前缀,默认是服务名,如没特殊需求可不修改,使用服务名可省略

extension-configs: 读取多配置文件的方式,官方提供的另一种方式为shared-configs,使用方式一样,但优先级不同:shared-configs < extension-configs < 默认(orderService.properties)

配置中心的配置文件可通过代码实现推送,也可直接在nacos界面添加,此处直接页面添加。如上【订单服务】的bootstarp.yml的配置可知,该服务可读取的配置文件Data Id为:orderService.yaml和common.yaml。直接在配置中心添加,如下图:

Data Id需要带上文件后缀,后缀为yaml,yml读取不到,创建完直接发布即可。发布完成后会在列表呈现,同理创建orderService.yaml:

3,读取配置中心配置,接收实时变化配置

一般会使用配置文件接受配置,此处简单实现,直接在启动类接收:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@RefreshScope
public class OrderApplication {

    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext run = SpringApplication.run(OrderApplication.class, args);
        while (true) {
            String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));

            String commonUrl = run.getEnvironment().getProperty("spring.datasource.url");
            String orderServiceName = run.getEnvironment().getProperty("orderService.name");
            System.out.println(format + "-commonUrl: " + commonUrl + " , " + "-orderServiceName: " + orderServiceName);

            TimeUnit.SECONDS.sleep(3);
        }
    }
}

打印结果如下:

4,多环境切换及动态配置更新

4.1,动态配置更新

通过nacos可视化页面直接修改配置的值,项目中即可直接读取到更新后的配置,无需重启服务

4.2,环境切换

上述步骤读取了命名空间为public的公共配置和微服务私有配置,例如切换为dev环境,命名空间dev下需创建同名配置,若不存在bootstrap.yml中指定读取的配置文件,则项目中读取属性值为空。再将bootstrap.yml的namespace改为对应命名空间的namespace id即可,需重启服务

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值