nacos实现对minio的动态版本切换
问题:怎样在项目部署后,在不涉及对源码的改动情况下,以及如部分场景下业务的更替进行版本切换呢?
这里我们选择通过nacos进行相关操作,下面将以nacos控制minio修改服务提供商这一示例进行演示
首先,什么是nacos?
Nacos 是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 的目标是帮助您发现、配置和管理微服务。它提供了一组简单易用的特性集,用于构建云原生应用,其特性包括:
-
服务发现与健康监测: Nacos 支持基于 DNS 和基于 RPC 的服务发现,可以检测服务实例的健康状况,并在服务不可用时自动剔除。
-
动态配置服务: 允许应用程序在不重启的情况下动态地更新配置。Nacos 会实时推送配置变更到客户端,减少配置更新时的延迟。
-
动态 DNS 服务: 支持基于服务的 DNS 解析,可以将服务名解析为 IP 地址,支持 A 记录和 SRV 记录。
-
服务及其元数据管理: Nacos 提供服务及其元数据的管理功能,包括命名空间、集群、分组等概念,使得服务管理更加灵活和精细。
-
非侵入式的服务管理: Nacos 的服务管理是无侵入式的,不需要在服务代码中添加任何特殊的 SDK 或者框架,只需在启动时指定 Nacos 的地址即可。
-
丰富的监控指标: 提供详细的监控数据,包括服务调用成功率、响应时间、健康检查状态等,方便运维人员进行监控和故障排查。
-
安全性和权限控制: 支持基于角色的访问控制(RBAC),可以对不同用户设置不同的权限,保护敏感的配置和资源。
Nacos 的设计目标是高度可扩展、高可用、高性能,并且易于使用。它支持多种部署模式,包括单机、集群以及高可用集群,可以根据实际需求选择合适的部署方案。Nacos 已经在阿里巴巴内部大规模使用,并逐渐被社区广泛采纳,适用于各种云原生场景下的服务管理和配置中心需求。
详情可见
nacos 的文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
nacos 的架构原理:https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST
好了,回归正题我们采用的是虚拟机docker拉取镜像部署的方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | docker search nacos docker pull nacos/nacos-server # 镜像拉完之后,启动脚本 docker run -d \ --name nacos \ --privileged \ --cgroupns host \ --env JVM_XMX=256m \ --env MODE=standalone \ --env JVM_XMS=256m \ -p 8848 : 8848 /tcp \ -p 9848 : 9848 /tcp \ --restart=always \ -w /home/nacos \ nacos/nacos-server |
http://***:8848/nacos进入后台管理
输入对应内容后保存
1 2 3 4 5 6 7 8 9 10 11 12 | nacos: config: secret-key: nacos access-key: nacos data-id: jc-club-oss group: DEFAULT_GROUP type: yaml server-addr: your-ip: 8848 auto-refresh: true remote-first: true bootstrap: enable: true |
1 2 3 4 5 6 7 8 9 10 | @NacosValue (value = "${storage.service.type}" ,autoRefreshed = true ) private String storageType; @RequestMapping ("/testGetA @RequestMapping ( "/testNacos" ) public String testNacos() throws Exception { List<String> allBucket = fileService.getAllBucket(); return storageType; } |
这样,只需要修改我们nacos的配置,即可做到不修改源码情况下对服务提供商的具体修改。
pom文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version> 2.4 . 2 </version> <type>pom</type> <scope> import </scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version> 2.4 . 2 </version> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version> 8.2 . 0 </version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version> 1.18 . 34 </version> <scope>compile</scope> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version> 0.2 . 11 </version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version> 2.4 . 2 </version> </dependency> </dependencies> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2023-07-23 每周总结2023/7/23
2022-07-23 暑期java自学