23. SpringCloudAlibaba 服务配置中心项目集成

引入依赖

在每一个微服务引入服务配置

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

修改应用配置

在每一个微服务的 application.yaml 文件中,添加配置中心相关配置

spring:
  application:
    name: server-user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: user_group
  profiles:
    active: dev

配置 Nacos

在 Nacos 菜单页面的配置管理-配置列表中添加配置,配置内容如下:
image

  • Data ID就是配置集ID,通常情况下就是某个配置文件的ID,这个ID的命名遵循一定的规则,如下所示。
   ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  • 这里,对应到用户微服务的Data ID就是:server-user-dev.yaml。所以,对于用户微服务来说,我们在Data ID中输入server-user-dev.yaml。
  • Group:配置分组,配置分组要与spring.cloud.nacos.config.group对应,用户微服务的配置分组就是user_group。
  • 描述:对当前配置的简单描述。例如,用户微服务的开发环境配置。
  • 配置格式:表示配置内容所使用的文件格式,这里我们选择YAML格式。
  • 配置内容:配置文件的内容,这里我们直接将application.yml文件的内容复制进去即可。

配置好之后点击页面的发布按钮,发布成功后会跳转到配置管理-配置列表界面。

实现动态刷新

注入配置

在用户微服务 shop-user 的下新建 NacosController 类,并在 NacosController 类中注入 org.springframework.context.ConfigurableApplicationContext 类,通过 ConfigurableApplicationContext 获取到系统环境变量,并从环境变量中获取到 author.name 属性的值,就是我们在 Nacos 中配置的名称

@Slf4j
@RestController
public class NacosController {

    @Autowired
    private ConfigurableApplicationContext context;

    @GetMapping("/nacos/test")
    public String nacosTest(){
        String authorName = context.getEnvironment().getProperty("author.name");
        log.info("获取到的作者姓名为:{}", authorName);
        return authorName;
    }
}

修改 Nacos 配置

修改 Nacos 配置,添加 author.name 配置
image

测试效果
image

修改配置,但是不重启 server-user

image

测试效果
image

通过注解方式获取 Nacos 配置

在用户微服务 shop-user 的 NacosController 类上添加@RefreshScope 注解,并将 Nacos 中的 author.name 的值注入到 NacosController 类中,并通过接口获取到注入的 Nacos 中的 author.name 值,如下所示。

@Slf4j
@RefreshScope
@RestController
public class NacosController {

    @Autowired
    private ConfigurableApplicationContext context;

    @Value("${author.name}")
    private String nacosAuthorName;

    @GetMapping("/nacos/test")
    public String nacosTest(){
        String authorName = context.getEnvironment().getProperty("author.name");
        log.info("获取到的作者姓名为:{}", authorName);
        return authorName;
    }

    @GetMapping("/nacos/name")
    public String nacosName(){
        log.info("从Nacos中获取到的作者的姓名为:{}", nacosAuthorName);
        return nacosAuthorName;
    }
}

修改 Nacos 配置

image

查看效果

image

修改 Nacos 配置

image

查看效果

image

实现配置共享

单服务多环境实现共享

实现单服务多环境实现共享,通常可以通过命名空间和分组来实现不同环境的配置隔离。

使用命名空间

  • 登录 Nacos 控制台。
  • 在左侧菜单中选择“命名空间”。
  • 点击“创建命名空间”按钮,为每个环境(如开发、测试、生产)创建一个命名空间。
  • 将不同环境的配置放在不同的命名空间中,比如 dev、test、prod。

使用配置分组

  • 创建配置分组
    • 在创建或编辑配置时,您可以指定一个分组名称,比如 DEFAULT_GROUP 或自定义的组名。
    • 不同环境可以使用不同的分组名,但更常见的做法是使用命名空间来区分环境。

配置环境变量或启动参数

application.yml 配置分组和命名空间

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        namespace: ${NACOS_NAMESPACE:default}
        group: ${NACOS_GROUP:DEFAULT_GROUP}

在启动时,配置环境变量

--NACOS_NAMESPACE=your_namespace_id 
--NACOS_GROUP=your_group_name

多服务配置实现共享

  1. 在Nacos中新建一个以server-all.yaml为Data ID的配置,配置中的主要内容为用户微服务、商品微服务和订单微服务共有的配置
  2. 在每个微服务配置自己的 application.yaml 配置
  3. 在每个微服务的 bootstrap.yaml 文件添加共享配置
```JavaScript
spring:
  application:
    name: server-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: product_group
        shared-configs[0]:
          data_id: server-all.yaml
          group: all_group
          refresh: true
  profiles:
    active: dev

posted @ 2024-11-06 23:44  Jacob-Chen  阅读(107)  评论(0)    收藏  举报