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

news2024/11/15 4:56:47

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反向代理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启用新的精细服务权限来更好地控制账单、成本管理和账户服务的访问权限

12 月 11 日&#xff0c;亚马逊云科技将在服务前缀 aws-portal 下停用账单、成本管理和账户控制台&#xff08;https://docs.amazonaws.cn/en_us/service-authorization/latest/reference/list_awsbillingconsole.html&#xff09;的 Amazon Identity and Access Management&am…

LeetCode-热题100-笔记-day29

199. 二叉树的右视图https://leetcode.cn/problems/binary-tree-right-side-view/ 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1…

音乐网站设计与实现

目 录 摘要 Abstract 1、引言 1.1 课题的目的和意义 1.2 国内现状分析 2、可行性研究与需求分析 2.1 可行性研究 2.1.1 经济可行性 2.1.2 技术可行性 2.1.3 运行可行性 2.1.4 时间可行性 2.1.5 法律可行性 2.2 需求分析 2.2.1 系统需求 2.2.2 …

如何让两台手机相互远程控制?

你的两台手机是什么系统的&#xff1f;如果你的两台手机都是安卓系统&#xff0c;而且都是安卓7.0及以上版本的系统&#xff0c;那么恭喜你&#xff0c;这两台手机可以相互远程控制&#xff01; 你可以利用两个软件实现将两台手机相互远程控制的想法。为了避免混淆&#xff0c…

中小企业建设数字化工厂,选择集成还是重构

随着科技的飞速发展和市场竞争的日益激烈&#xff0c;数字化工厂管理系统已成为中小企业未来发展的必经之路。然而&#xff0c;对于许多中小企业来说&#xff0c;建设数字化工厂并非易事。在建设数字化工厂的过程中&#xff0c;企业需要面对许多问题&#xff0c;其中最关键的问…

Git:Git的一些基本操作

文章目录 基本认识使用方法创建本地仓库配置本地仓库 工作区、暂存区、版本库的概念添加文件版本回退撤销修改删除操作 基本认识 首先要对Git有一个基本的认知&#xff1a; Git本质上是一个版本控制器&#xff0c;可以对一个信息的多个版本进行一些控制&#xff0c;而能对版本…

牛客: BM6 判断链表中是否有环

牛客: BM6 判断链表中是否有环 文章目录 牛客: BM6 判断链表中是否有环题目描述题解思路题解代码 题目描述 题解思路 一个慢指针,每次跳一次,一个快指针,每次跳两次,如果快指针遍历到链表终点,则链表无环,若慢指针和快指针相遇,则链表有环 题解代码 package main import . &…

MySQL基础运维知识点大全

一. MySQL基本知识 1. 目录的功能 通用 Unix/Linux 二进制包的 MySQL 安装下目录的相关功能 目录目录目录binMySQLd服务器&#xff0c;客户端和实用程序docs信息格式的 MySQL 手册manUnix 手册页include包括&#xff08;头&#xff09;文件lib图书馆share用于数据库安装的错…

第二章 进程与线程 四、进程通信

目录 一、共享存储 1、基于数据结构的共享 2、基于存储区的共享 二、消息传递 1、直接通信方式&#xff08;消息发送进程要指明接收进程的ID&#xff09; 2、间接通信方式&#xff08;通过“信箱”间接地通信。因此又称“信箱通信方式”&#xff09; 三、管道通信 注意&…

postgresql-视图

postgresql-视图 视图概述使用视图的好处 创建视图修改视图删除视图递归视图可更新视图WITH CHECK OPTION 视图概述 视图&#xff08;View&#xff09;本质上是一个存储在数据库中的查询语句。视图本身不包含数据&#xff0c;也被称为 虚拟表。我们在创建视图时给它指定了一个…

MySQL的sql_mode合理设置

MySQL的sql_mode合理设置 1、sql_mode设置介绍说明 sql_mode是个很容易被忽视的变量&#xff0c;默认值是空值&#xff0c;在这种设置下是可以允许一些非法操作的&#xff0c;比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式&#xff0c;所以开发、测试环…

Linux系统——远程连接Linux系统(图形化、命令行、使用命令行学习Linux系统、FinalShell)

目录 图形化、命令行 使用命令行学习Linux系统 FinalShell 安装 连接 图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统&#xff0c;都是支持这两种使…

前端综合练手小项目

导读 本篇文章主要以小项目的方式展开&#xff0c;其中给出的代码中均包含详细地注释&#xff0c;大家可以参照理解。下面4个小项目中均包含有 HTML、CSS、JavaScript 等相关知识&#xff0c;可以拿来练手&#xff0c;系统提升一下自己的前端开发能力。 废话少说&#xff0c;…

#循循渐进学51单片机#点亮你的LED#not.2

1、深刻理解电容的意义&#xff0c;并且在今后的电路学习过程中要多多注意参考别人电路中去耦电路的处理方法&#xff0c;积累经验。 1&#xff09;电容缓冲电压&#xff0c;抗电磁干扰&#xff1b; 2&#xff09;低频率电容&#xff0c;一般用的最多的是钽电容&#xff0c;电…

【C++11保姆级教程】列表初始化(Literal types)和委派构造函数(delegating))

文章目录 前言一、列表初始化 (List Initialization)1.1数组初始化1.2结构体初始化1.3容器初始化1.4列表初始化的优势 二、委派构造函数 (Delegating Constructors)2.1委派构造函数是什么&#xff1f;2.2委派构造函数示例代码2.3调用顺序2.3委派构造函数优势 总结 前言 C11引入…

flutter产物以aar形式嵌入android原生工程

以前做的项目中&#xff0c;flutter都是作为module嵌入原生工程中&#xff0c;新公司项目却是以aar形式嵌入android工程&#xff0c;这种优点是原生工程不必配置flutter环境也能跑了&#xff0c;这里记录一下简单步骤。 创建一个flutter module 通过android studio创建一个fl…

verdi dump状态机的波形时直接显示状态名

前段时间看到别人用verdi看状态机的波形时&#xff0c;可以显示定义的状态参数&#xff0c;觉得很有意思&#xff0c;特地学习了一下 通常拉出状态机信号的波形是下面这样的 这种信号&#xff0c;我们要想知道每个数值代表的状态&#xff0c;还需要跟定义的parameter比对 像这…

LeetCode(力扣)763. 划分字母区间Python

LeetCode763. 划分字母区间 题目链接代码 题目链接 https://leetcode.cn/problems/partition-labels/description/ 代码 class Solution:def partitionLabels(self, s: str) -> List[int]:last_occ {}for i, ch in enumerate(s):last_occ[ch] iresult []start 0end …

PolyAI:对话式AI代替传统客服

【产品介绍】 名称 PolyAI 具体描述 PolyAI 是一家总部位于伦敦的人工智能初创公司&#xff0c;致力于开发对话式人工智能的机器学**台&#xff0c; 在 B 轮融资中筹集了 4000 万美元&#xff0c;用于部署对话式人工智能代理并颠覆传统的客户…

下载安装nvm教程(附带下载切换node.js版本实操)

目录 一、介绍 二、下载 三、安装步骤 四、配置淘宝源 五、测试 六、常用的nvm命令 七、下载切换node版本实操 node版本参考 一、介绍 node版本管理&#xff1a;nvm就是可以切换你的node版本&#xff0c;特别是当node版本过高或者过低时候&#xff0c;就可以用nvm进行…