【微服务】六. Nacos配置管理

2023-09-15 10:19:49

6.1 Nacos实现配置管理

配置更改热更新
Nacos统一配置管理
在nacos左侧新建配置管理
Data ID:就是配置文件名称 一般命名规则:服务名称-环境名称.yaml
配置内容填写:需要热更新需求的配置
nacos新建配置
配置文件的id:[服务名称]-[profile].[后缀名]
分组,默认即可
格式,目前支持yaml和properties

6.2 微服务配置拉取

配置获取的步骤如下:
服务启动会先读取bootstrap.yml文件的内容,将有关nacos地址的内容写在bootstrap文件中。
获取nacos中的配置步骤
1.引入Nacos的配置管理客户端依赖:

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

2.在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

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

如何证明拉取到了配置呢?
微服务获取nacos中的配置信息
读取nacos配置内容
我们在user-service中将pattern.dateformat这个属性注入到UserController中做测试

@RestController
@RequestMapping("/user")
public class UserController {
    // 注入nacos中的配置属性
    @Value("${pattern.dateformat}")
    private String dateformat;
    
    // 编写controller,通过日期格式化器来格式化现在时间并返回
    @GetMapping("now")
    public String now(){
        return LocalDate.now().format(DateTimeFormatter.ofPattern(dateformat, Local.CHINA));
    }
}

总结

将配置交给Nacos管理的步骤:
在Nacos中添加配置文件
在微服务中引入nacos的config依赖
在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件。

6.3 配置热更新

配置自动刷新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

方式一:在@Value注入的变量所在类上添加注解@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController{
    @Value("${pattern.dateformat}")
    private String dateformat;
}

方式二:使用@ConfigurationProperties注解

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

总结:

Naocs配置更改后,微服务可以实现热更新,方式:
通过@Value注解注入,结合@RefreshScope来刷新
通过@ConfigurationProperties注入,自动刷新

注意事项:
不是所有的配置都适合放到配置中心,维护起来比较麻烦。
建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置。

6.4 多环境配置共享

微服务启动时会从nacos读取多个配置文件:

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

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件。

多种配置的优先级:
服务名-profile.yaml > 服务名称.yaml > 本地配置
nacos多种配置优先级

总结

微服务会从nacos读取的配置文件:

  • [服务名]-[spring.profile.active].yaml,环境配置
  • [服务名].yaml,默认配置,多环境共享

优先级:
[服务名]-[环境].yaml > [服务名].yaml > 本地配置

6.5 nacos集群搭建

Nacos生产环境下一定要部署为集群状态

6.5.1 集群结构图

我们计划的集群结构
nacos集群搭建

6.5.2 搭建集群

搭建集群的基本步骤:

  • 搭建数据库,初始化数据库表结构
  • 下载nacos安装包
  • 配置nacos
  • 启动nacos集群
  • nginx反向代理

6.5.2.1 初始化数据库

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。
官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库参考后续课程。
这里以单点的数据库为例讲解

6.5.2.2 下载nacos

6.5.2.3 配置nacos

解压nacos安装包以后,
目录说明:

  • bin:启动脚本
  • conf:配置文件
    进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf。然后添加内容:
# 添加内容为nacos集群分别的安装IP和端口  例如
192.168.16.101:8845
192.168.16.101:8846
192.168.16.101:8847

然后修改application.properties文件,添加数据库配置

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123

6.5.2.4 启动

将nacos文件复制三份,分别命名为:nacos1、nacos2、nacos3
然后分别修改三个文件夹中的application.properties,
nacos1:

server.port=8845

nacos2:

server.port=8846

nacos3:

server.port=8847

6.5.2.5 nginx反向代理

安装解压nginx
修改conf/nginx.conf文件,配置如下:

upstream nacos-cluster {
    server 127.0.0.1:8845;
    server 127.0.0.1:8846;
    server 127.0.0.1:8847;
}

server {
    listen      80;
    server_name localhost;
    
    location /nacos {   # nacos默认路径
        proxy_pass http://nacos-cluster;
    }
}

对于nacos的操作和之前一样,新增完配置之后,会在数据库的conf.info表中新增一条配置信息,做了数据持久化

总结:

集群搭建步骤:

  • 搭建MySQL集群并初始化数据库表
  • 下载解压nacos
  • 修改集群配置(节点信息)、数据库配置
  • 分别启动多个nacos节点
  • nginx反向代理
更多推荐

AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来

作者:NiDemai,是NineData数据库产品专家,曾任阿里云数据库国际产品总负责人,华为高斯GaussDB创始团队核心架构师,IBMDb2资深研发工程师。Demai专注Cloud-Nativedatabase架构设计,分析型MPP,企业数据库开发及生态,并且积极参与开源社区建立和发展。OpenAI的突破震撼整个市

用青龙面板实现阿里云盘每日签到

什么是青龙面板?青龙面板是支持Python3、JavaScript、Shell、Typescript的定时任务管理平台。青龙面板从功能上看,和群晖的计划任务很像,都可以定时执行一个任务,并发送通知,只是青龙面板更强大一些。安装在群晖上以Docker方式安装。在注册表中搜索whyour,选择第一个whyour/qingl

迅为iTOP-RK3568开发板Sobel 算子边缘检测

本小节代码在配套资料“iTOP-3568开发板\03_【iTOP-RK3568开发板】指南教程\04_OpenCV开发配套资料\32”目录下,如下图所示:Sobel(索贝尔)算子是计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。索贝尔算子把图像中每个像素的上下左右四领域

【数据结构】顺序表与ArrayList

作者主页:paperjie的博客本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。其他专栏:《算法详解》《C语言》《javaSE》等内容

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(七)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.模型训练1)数据集分析2)数据预处理3)模型创建4)模型训练5)获取特征矩阵2.后端Django3.前端微信小程序1)小程序全局配置文件2)推荐电影页面3)个人信息界面以及用户登录记录页面系统测试1.模型损失曲线2.测试效果相关其它博客工程源代码下载其它资料下

让机器人飞入寻常百姓家丨青源Workshop「人形机器人」观点集锦

人形机器人并非新事物,早在上世纪70年代,日本早稻田大学加藤一郎就带领团队研发出世界上第一台人形智能机器人——WABOT-1。而去年马斯克Optimus的发布,也对“机器人热”再度推波助澜。人形机器人领域的发展,需要软件和硬件的共同迭代和优化,同时相比于无人驾驶,人形机器人涉及更加复杂的真实世界多模态环境。机器人技术依

Cpp/Qt-day020918Qt

目录完善登录框点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。如果账号和密码匹配,则弹出信息对话框,给出提

CSI及CPHY的学习知识点

1.CPHY不需要linecoding8b/10b这些线路编码是不需要的,CPHY的三线编码本身就解决了连续0/1的情况。2.CPHY的三线编码使用状态跳变传递信息的有六个线态(wirestate),每一个当前线态都可以跳变到另外5个线态。每一次跳变对应3bitsymbol【跳变有5种可能,用3bit表示,所以3bit

OpenCV自学笔记二十:图像分割和提取

1、用分水岭算法实现图像分割与提取分水岭算法是一种经典的图像分割算法,用于将图像中的前景和背景进行分离。它基于图像中的灰度值和梯度信息来确定边界,并通过填充区域将图像分割成多个连通的区域。以下是分水岭算法的基本原理:1.预处理:首先对输入图像进行预处理操作,例如灰度化、平滑滤波和边缘检测等,以便更好地捕捉图像的特征。2

新工具 !一键无限重置 Jetbrain 2023 最新版系列

今天逛github,看到了一个新的Jetbrains系列软件的无限30天试用的方法,体验了下,感觉还不错,使用方法很简单。我看介绍软件还处于测试阶段,大家感兴趣的可以试试看。演示软件RubyMine2023.1JetbrainKiller0.5.0使用方法软件名称叫JetbrainKiller,使用方法就是打开软件,一

基于 Socket 网络编程

基于Socket网络编程前言一、基于Socket的网络通信传输(传输层)二、UDP的数据报套接字编程1、UDP套接字编程API2、使用UDPSocket实现简单通信三、TCP流套接字编程1、TCP流套接字编程API2、使用TCPSocket实现简单通信3、使用Tcp协议进行网络传输的“五大要点”前言我们再进行网络编程时

热文推荐