设为首页 加入收藏

TOP

Nacos配置中心 (介绍与配置)(一)
2023-07-26 08:16:48 】 浏览:121
Tags:Nacos

Nacos配置中心

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。image

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

启动微服务时的流程:如图

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

bootstrap.yaml文件的优先级高于application.yaml

image

设置配置中心

1、设置Nacos配置文件

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

image

然后在弹出的表单中,填写配置信息:

Data Id命名规则:[服务名称]-[profile].[后缀名] 如:userservice-dev.yaml 一定要遵守

image

2、配置微服务

①微服务都要导入依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

②添加bootstrap.yaml

这里的取名一定要和nacos配置的一样

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

本例中,就是去读取userservice-dev.yaml

image

③业务中读取nacos配置中心的配置

这里的读取都实现了配置热更新,即更新nacos配置文件无需重启服务

有两种方式,二选一即可。

  • 方式一:@RefreshScope

    1. 使用@Value注解得到nacos配置文件信息
    2. 在@Value注入的变量所在类上添加注解@RefreshScope
    3. 使用nacos配置文件信息完成业务

image

  • 方式二:@ConfigurationProperties注解代替@Value注解【推荐】

    1. 创建一个配置类,在类上面加入@Component @Data @ConfigurationProperties

      !!!注意:这里的prefix="变量是配置文件中的前缀名",String dateformat需要取名和配置文件中一致

      nacos配置文件:

image

 配置类:

 ```java
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
 @Component	//作用:讲从nacos中读取到的信息写成对象并注入到spring容器
 @Data	//作用:在业务类注入该类即可调用其中的信息
 @ConfigurationProperties(prefix = "pattern")	//读取Nacos配置文件的patterrn.dateformat属性
 public class PatternProperties {
     private String dateformat;
 }
 ```
  1. 业务中注入nacos配置文件类,并调用配置信息完成业务

    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private PatternProperties patternProperties;
    
        @GetMapping("now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
        }
    }
    

设置配置共享

引入:有些配置在开发和测试环境都是一样的就可以使用配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。(即[spring.application.name]这个名字下的所有环境都会读取到该配置文件)

举例:有两个服务分别配置在userservice的dev和test环境运行;此时在nacos配置了一个userservice.yaml 和 userservice-dev.yaml;

结果:两个服务都能读到userservice.yaml、但只有dev环境的才可以读到userservice-dev.yaml

1. 配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:nacos的局部 > nacos全局 > 服务本地
【当有相同配置的时候优先级高的覆盖低的】

image

搭建Nacos集群

注意:搭建集群后,服务访问的nacos接口就改成访问nginx的接口。 如nginx是80接口,那服务的bootstrap.yaml配置文件访问nacos的接口改成80

1.集群结构图

官方给出的Nacos集群图:
image

其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

我们计划的集群结构:
image

三个nacos节点的地址:

节点 ip port
nacos1 192.168.150.1 8845
nacos2 192.168.150.1 8846
nacos3 192.168.150
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇读Java实战(第二版)笔记06_新的.. 下一篇《Terraform 101 从入门到实践》 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目