首页
友链
关于
免责声明
Search
1
王者营地战绩数据王者荣耀查询网页源码
6,209 阅读
2
群晖Active Backup for Business套件备份Linux服务器教程
4,384 阅读
3
影视分享
4,313 阅读
4
(亲测)Jrebel激活破解方式2019-08-21
4,289 阅读
5
centos7 安装及卸载 jekenis
3,573 阅读
日常
文章
后端
前端
Linux
异常
Flutter
分享
群辉
登录
Search
标签搜索
docker
springboot
Spring Boot
java
linux
Shiro
Graphics2D
图片
游戏账号交易
Mybatis
Spring Cloud
centos
脚本
Web Station
群辉
王者营地
战绩查询
平台对接
Spring Cloud Alibaba
nacos
绿林寻猫
累计撰写
249
篇文章
累计收到
26
条评论
首页
栏目
日常
文章
后端
前端
Linux
异常
Flutter
分享
群辉
页面
友链
关于
免责声明
搜索到
1
篇与
Nacos config
的结果
2023-07-26
Spring Cloud Alibaba 系列之 Nacos 篇(配置中心)
一、前言上一篇 Spring Cloud Alibaba 系列之 Nacos 篇(服务注册与发现) 介绍了 Nacos 的服务注册与发现,本篇接续介绍其另一个功能--配置中心。二、简单介绍Nacos 提供用于存储配置和其他元数据功能,为分布式系统中的外部化配置提供服务器端和客户端支持,使用 Spring Cloud Alibaba Nacos Config 就可以在 Nacos Server 集中管理 Spring Cloud 应用的外部属性配置。2.1 实现目的不使用配置中心之前,我们在管理项目配置会遇到如下问题:{message type="info" content="配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护,这比较困难。配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。"/}这些问题通过使用 Nacos 的配置中心功能快捷、简便的解决。2.2 基础概念为了区分环境或项目间的配置,我们需要了解 Nacos 给出的如下3个概念:{message type="warning" content=" 命名空间(Namespace)命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间"/}{message type="warning" content=" 配置分组(Group)命配置分组用于将不同的服务可以归类到同一分组。一般将一个项目的配置分到一组"/}{message type="warning" content=" 配置集(Data ID)在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集"/}三者关系如下图: 三、实战演练首要条件就是启动 Nacos 的服务环境。我们使用上一篇文章搭建好的 Nacos 服务,不清楚的读者可以先移步至上一篇浏览前置内容。3.1 基础配置搭建名为 nacos-config 的springboot项目 🔧 第一步,添加依赖:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.demo</groupId> <artifactId>nacos</artifactId> <version>1.0.0</version> </parent> <packaging>jar</packaging> <artifactId>nacos-config</artifactId> <description> 配置中心 </description> <properties> <java.version>1.8</java.version> <!--编译项目不生成测试类也不进行测试--> <maven.test.skip>true</maven.test.skip> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring cloud alibaba 依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 🔧 第二步,创建 bootstrap.properties 或 bootstrap.yml 文件: 使用配置中心后,我们通常会把 application.properties 或 application.yaml 中的配置移植到 Nacos 服务上,但项目连接配置中心服务需要单独配置,因此需要用到 bootstrap.properties 或 bootstrap.yml 文件。其中,这 4 种文件的加载顺序由高到低依次是:{message type="info" content=" 📢 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml"/}我们的 bootstrap.yml 配置如下:server: port: 38001 spring: application: # 应用名 name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848 # namespace: public group: DEFAULT_GROUP file-extension: yaml # 配置格式(默认是 properties) # 连接注册中心的账号和密码 以下是默认账密 username: nacos password: nacos 🔧 第三步,移植配置数据: 即将 application.properties 或 application.yml 中的业务配置数据移植到配置中心服务上。本次演练,我们使用如下配置数据进行测试:www: name: www.maven.vip 登录 Nacos 管理后台,管理配置 -> 配置列表,,操作如下图:在新建配置界面中, Data ID 通常对应 spring.application.name 的值 + (.properties 或 .yaml)。数据配置格式,目前只支持 properties 和 yaml。 🔧 第四步,创建测试类: 用于封装上文在 Nacos 服务上配置的数据@Data @Component @ConfigurationProperties(prefix = "www") public class DataBaseConfig { private String name; }用于测试获取配置数据@RestController @RefreshScope public class ConfigController { @Autowired private DataBaseConfig dataBaseConfig; // @Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解 @Value("${www.name}") private String name; @RequestMapping("/getConfig") public String getConfig() { return dataBaseConfig.getName(); } @RequestMapping("/getName") public String getName() { return name; } }接下来进行接口请求测试,启动项目,请求 🎈 http://127.0.0.1:38001/getConfig 结果如下图:成功请求获取配置中心的数据。3.2 动态刷新所谓动态刷新就是在不重启项目的基础上,修改配置中心的数据,项目能立即获取最新数据,接下来我们操作一遍:将配置数据改成:www: name: www.baidu.com修改配置后,不重启项目,再次请求接口,成功获取修改后的配置数据。3.3 环境隔离项目开发一般分为,开发、测试、预发和生产这4个阶段,每个阶段都有对应的配置数据(数据库、redis、MQ 连接配置等),这些数据都各不相同,为了更好的区分和维护这些数据,环境隔离功能必不可少。那配置中心如何做环境隔离呢?需要用到上文提到的命名空间,操作如下:📍 第一步,登录 Nacos 管理后台,命名空间菜单,新建一个名为 TEST 的命名空间:该命名空间就作为测试环境的专属空间。📍 第二步,在新建的命名空间下,创建一个配置:www: name: test📍 第三步,修改项目中的 bootstrap.properties 或 bootstrap.yml 文件,新增:server: port: 38001 spring: application: # 应用名 name: nacos-config cloud: nacos: config: server-addr: 127.0.0.1:8848 #此处就是创建 TEST 命名空间生成的 id 值 namespace: c716de35-9cb2-4c82-b86b-c74854ef726b group: DEFAULT_GROUP file-extension: yaml # 配置格式(默认是 properties) # 连接注册中心的账号和密码 以下是默认账密 username: nacos password: nacos最后,重启项目,请求接口,结果如下图:成功请求 TEST 命名空间下的配置数据。3.4 数据持久化Nacos 默认情况下是采用 apache derby 内嵌数据库进行数据存储,在单机模式时可以使用 Nacos 嵌入式数据库实现数据存储,但是 derby 数据库不方便观察数据存储的基本情况,从 Nacos 0.7 版本开始增加了支持 mysql 数据源能力。接下来,我们实现持久化功能。📍 第一步,创建名为 nacos_config 的数据库,在 Nacos 的程序包下,有个 conf 目录,将里边的 nacos-mysql.sql 导入到新建的数据库中。📍 第二步,修改 conf/application.properties 的数据库连接配置:将注释打开:spring.datasource.platform=mysql db.num=1 # 注意修改数据库名、账号和密码 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=tiger📍 第三步,重启 Nacos 服务,再次访问 http://localhost:8848/nacos ,如下图:登录发现,之前配置的数据都消失,因为我们更换了存储源( MySQL )。现在数据库中的数据都是空的,在 Nacos 管理后台中,我们尝试新建一条配置:database.url=abc database.username=root database.password=riger保存后,查看数据库信息,如下图:配置数据成功持久化。3.5 集群部署为保证配置中心的高可用性,集群部署是必不可少的整合方案。我们在本地测试,将 Nacos 安装包拷贝成 3 份,在持久化模式的基础上,操作步骤如下:📍 第一步,将 Nacos 程序包下的 conf/cluster.conf.example 改名为 conf/cluster.conf ,修改内容:127.0.0.1:8801 127.0.0.1:8802 127.0.0.1:8803📍 第二步,修改 3 份 Nacos 安装包下的 conf/application.properties 文件,将 server.port 依次改成 8801,8802,8803 。保存后,启动 3 份 Nacos 即可:cd nacos/bin # windows 单机模式启动 startup.cmd # linux/mac ./startup.sh注意,启动命令无需加 -m standalone 参数引申问题: Nacos 做了集群,有 3 个访问地址,客户端如何配置请求呢?有 2 种请求方案:修改 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8801,127.0.0.1:8802,127.0.0.1:8803使用 Nginx 反向代理 Nacos 集群。四、参考资料📣 Nacos 官网五、项目源码📣 源码
2023年07月26日
2,258 阅读
2 评论
0 点赞