微服务注册中⼼2

news/2024/9/22 13:46:36/

5.Nacos配置管理

Nacos除了可以做注册中⼼,同样可以做配置管理来使⽤

5.1 统⼀配置管理

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

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

在业界常⻅的服务配置中⼼,有下⾯这些:

  • Apollo是由携程开源的分布式配置中⼼。特点有很多,⽐如:配置更新之后可以实时⽣效,⽀持灰度发布功能,并且能对所有的配置进⾏版本管理、操作审计等功能,提供开放平台API。并且资料也写的很详细
  • Disconf是由百度开源的分布式配置中⼼。它是基于Zookeeper来实现配置变更后实时通知和⽣效的
  • SpringCloud Config这是Spring Cloud中带的配置中⼼组件。它和Spring是⽆缝集成,使⽤起来⾮常⽅便,并且它的配 置存储⽀持Git。不过它没有可视化的操作界⾯,配置的⽣效也不是实时的,需要重启或去刷新。
  • Nacos这是SpingCloud alibaba技术栈中的⼀个组件,前⾯我们已经使⽤它做过服务注册中⼼。其实它也集成了服务配置的功能,我们可以直接使⽤它作为服务配置中⼼。
5.1.1 在nacos中添加配置⽂件

​​​​​​​

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

5.1.2 从微服务拉取配置

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

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

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

配置实现步骤:

1)引⼊nacos-config依赖

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

2)添加bootstrap.yaml

不能使⽤原来的application.yml作为配置⽂件,⽽是新建⼀个bootstrap.yml作为配置⽂件配置⽂件优先级(由⾼到低):

bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

spring:application:name: service-productcloud:nacos:config:server-addr: 127.0.0.1:8848 #nacos中⼼地址file-extension: yaml # 配置⽂件格式profiles:active: dev # 环境标识,开发环境

4) 在nacos中添加配置

5.2 配置热更新

我们最终的⽬的,是修改nacos中的配置后,微服务中⽆需重启即可让配置⽣效,也就是配置热更新。要实现配置热更新,可以使⽤两种⽅式:

配置中⼼添加配置

config:appName: product
5.2.1.⽅式⼀

在@Value注⼊的变量所在类上添加注解@RefreshScope:

@RestController
@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
public class NacosConfigController {@Value("${config.appName}")private String appName; @GetMapping("/nacos-config-test1") public String nacosConfingTest1() {return appName;} 
}
5.2.2.⽅式⼆

硬编码⽅式

@RestController 
public class NacosConfigController {@Autowired private ConfigurableApplicationContext applicationContext; @GetMapping("/nacos-config-test2") public String nacosConfingTest2() { return applicationContext.getEnvironment().getProperty("config.app
Name"); }
}
5.3 配置共享

当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就考虑可不可以将公共配置⽂件提取出来

5.3.1 同服务内配置共享

现步骤:

1.新建⼀个以 spring.application.name 命名的配置⽂件,然后将其所有环境的公共配置放在⾥

2.新建⼀个名为service-product-test.yaml配置存放测试环境的配置

3.新建⼀个名为service-product-dev.yaml配置存放开发环境的配置

4.在两个环境⽂件中配置独有信息

#多配置⼀段
config:env: test
#多配置⼀段
config:env: dev

5.添加测试⽅法

@RestController 
@RefreshScope
public class NacosConfigController {@Value("${config.env}")private String env; //3 同⼀微服务的不同环境下共享配置@GetMapping("/nacos-config-test3") public String nacosConfingTest3() { return env; }
}
5.3.2 不同微服务共享配置

不同服务之间实现配置共享的原理类似于⽂件引⼊,就是定义⼀个公共配置,然后在当前配置中引⼊

1.在nacos中定义⼀个DataID为all-service.yaml的配置,⽤于所有微服务共享

spring: 
datasource: 
driver-class-name: com.mysql.jdbc.Driver 
url: jdbc:mysql:///shopserverTimezone=UTC
username: root 
password: root 
cloud:nacos: discovery: server-addr: 127.0.0.1:8848

2.修改bootstrap.yaml

spring: 
application: 
name: service-product 
cloud: 
nacos: 
config: 
server-addr: 127.0.0.1:8848 #nacos中⼼地址 
file-extension: yaml # 配置⽂件格式 
shared-dataids: all-service.yaml # 配置要引⼊的配置
refreshable-dataids: all-service.yaml # 配置要实现动态配置刷新的配置 
profiles: 
active: dev # 环境标识

3.启动商品微服务进⾏测试

配置共享的优先级

nacos、服务本地同时出现相同属性时,优先级有⾼低之分:


http://www.ppmy.cn/news/1528838.html

相关文章

基于单片机的楼宇门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【数据结构】排序算法---计数排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaGo 结语 1. 定义 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。计数排序不是基于比较的排序算法&#xff0c;其核心在于将输入的数据值转化为键存储在额外开辟的数组…

基于stm32的四旋翼无人机控制系统设计系统设计与实现

文章目录 前言资料获取设计介绍功能介绍设计程序 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业…

Gitlab及Git使用说明

目 录 1 Gitlab及Git介绍说明 5 1.1 什么是 Gitlab 5 1.2 什么是Git 5 1.3 Git 家族成员 5 1.4 Gitlab版本 5 1.5 Gitlab 优势 5 1.6 Gitlab 主要服务构成 6 1.7 Gitlab 简单工作流程 6 1.8 Gitlab用户角色 6 2 Gitlab安装与使用 7 2.1 Gitlab安装说明&#xff08;管理员&#…

网络安全中GET和POST区别在哪?

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

【数据结构】线性数据结构-顺序栈

栈&#xff08;Stack&#xff09;是一种基本的数据结构&#xff0c;具有以下特点&#xff1a; 后进先出&#xff08;LIFO, Last In First Out&#xff09;&#xff1a;栈内的数据项遵循后进先出的原则&#xff0c;即最后存入的项最先被取出。 操作限制&#xff1a;栈通常只允许…

串口助手的qt实现思路

要求实现如下功能&#xff1a; 获取串口号&#xff1a; foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) {qDebug() << "Port: " << serialPortInfo.portName(); // e.g. "COM1"qDebug() <<…

本地生活商城开发搭建 同城O2O线上线下推广

同城本地化商城目前如火如荼&#xff0c;不少朋友咨询本地生活同城平台怎么开发&#xff0c;今天商淘云与大家分享同城O2O线上商城的设计和开发。 本地生活商城一般会涉及到区域以及频道类&#xff0c;一般下单需要支持用户定位、商家定位&#xff0c;这样利于用户可以快速找到…