Gone v2 配置管理4:连接Apollo配置中心

🚀 发现 gone-io/gone:一个优雅的 Go 依赖注入框架!💻 它让您的代码更简洁、更易测试。🔍 框架轻量却功能强大,完美平衡了灵活性与易用性。⭐ 如果您喜欢这个项目,请给我们点个星!🌟 您的支持是我们前进的动力!🤝 欢迎贡献代码或提出建议,一起让 gone 变得更好!👨‍💻 #golang #依赖注入 #开源 👉github.com/gone-io/gone
本文原地址:https://github.com/gone-io/goner/blob/main/apollo/README.md

相关内容
- Gone v2 配置管理1:使用 Gone Viper 组件进行本地配置
- Gone v2 配置管理2:使用 goner/viper/remote链接远程的配置中心,支持etcd、consul、firestore、nats
- Gone v2 配置管理3:连接 Nacos 配置中心
- Gone v2 配置管理4:连接Apollo配置中心

文章目录

    • 简介
    • 快速开始
      • 1. 加载 Apollo 配置组件
      • 2. 配置 Apollo 连接信息
      • 3. 使用配置
    • 配置动态更新
    • 配置项说明
    • 高级用法
      • 多命名空间支持
      • 本地缓存配置
    • 注意事项
    • 参考资料

简介

Gone Apollo 组件是基于 Apollo 配置中心的 Gone 框架集成组件,提供了配置的动态获取和实时更新功能。Apollo 是携程开源的分布式配置中心,能够集中管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

快速开始

1. 加载 Apollo 配置组件

package mainimport ("github.com/gone-io/gone/v2""github.com/gone-io/goner/apollo"
)func main() {gone.Loads(apollo.Load, // 加载 Apollo 配置组件// 其他组件...).// 或者 Serve()Run()
}

2. 配置 Apollo 连接信息

在项目的配置文件中(如 config/default.yaml)添加以下配置:

apollo.appId: YourAppId           # Apollo 应用 ID
apollo.cluster: default           # 集群名称,默认为 default
apollo.ip: http://apollo-server:8080  # Apollo 配置中心地址
apollo.namespace: application     # 命名空间,默认为 application
apollo.secret: YourSecretKey      # 访问密钥(如果启用了访问密钥验证)
apollo.isBackupConfig: true       # 是否开启备份配置
apollo.watch: true                # 是否监听配置变更
apollo.useLocalConfIfKeyNotExist: true  # 如果 Apollo 配置中不存在某个 key,是否使用本地配置文件中的值

3. 使用配置

在 Gone 组件中注入配置:

type YourComponent struct {gone.Flag// 方式一:直接注入配置值DbUrl string `gone:"config,database.url"`// 方式二:通过 Configure 接口获取配置configure gone.Configure `gone:"*"`
}func (c *YourComponent) AfterProp() {// 方式二:动态获取配置var port interr := c.configure.Get("server.port", &port, "8080")if err != nil {// 处理错误}
}

配置动态更新

apollo.watch 设置为 true 时,Apollo 组件会监听配置变更,并自动更新已注册的配置项。
注意:需要动态更新的字段,必须使用指针类型才有效。

要使配置项支持动态更新,需要在获取配置时将配置项注册到变更监听器中:

type YourComponent struct {gone.Flag// 这些配置项将支持动态更新ServerPort *int    `gone:"config,server.port"`DbUrl      *string `gone:"config,database.url"`
}// 配置变更后,ServerPort 和 DbUrl 的值会自动更新

配置项说明

配置项说明默认值
apollo.appIdApollo 应用 ID,必须与 Apollo 配置中心中的应用 ID 一致-
apollo.cluster集群名称default
apollo.ipApollo 配置中心地址-
apollo.namespace命名空间application
apollo.secret访问密钥,用于验证客户端身份-
apollo.isBackupConfig是否开启备份配置,开启后会将配置保存到本地true
apollo.watch是否监听配置变更,开启后配置变更时会自动更新false
apollo.useLocalConfIfKeyNotExist如果 Apollo 配置中不存在某个 key,是否使用本地配置文件中的值true

高级用法

多命名空间支持

Apollo 支持多个命名空间,默认使用 application 命名空间。如果需要使用多个命名空间,可以在配置中指定:

apollo.namespace: application,common,custom

本地缓存配置

apollo.isBackupConfig 设置为 true 时,Apollo 客户端会将配置缓存到本地,当 Apollo 服务不可用时,会使用本地缓存的配置。

注意事项

  1. 确保 Apollo 配置中心已正确部署并可访问
  2. 配置项的类型转换由 Gone 框架处理,支持基本类型(如 string、int、bool 等)
  3. 对于复杂类型(如结构体、数组等),Apollo 客户端会尝试将配置值解析为 JSON
  4. 配置变更监听功能需要设置 apollo.watch: true

参考资料

  • Apollo 官方文档
  • Gone 框架文档

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DSP28335 eCAN(增强型控制器局域网)

一、概述 1.1 特征 can协议2.0 ,高达1Mbps32个邮箱 1)—可配置接收或发送—可配置标准或扩展标识符—接收标识符屏蔽功能—支持数据和远程帧—支持0到8字节的数据帧—在接收和发送的消息上使用32位时间戳(发送接收计时器)—接收新消息保护—允许动态可编程的发送消息优先…

现代控制原理

一、在状态空间中,建立控制系统的数学模型 如:有单输入(U)--单输出(Y)控制系统,其状态方程和输出方程如下图: 二、画状态结构图 将上述状态方程转化为状态结构图有: 三、高阶控制系统的状态方…

【Git】基础使用

Git基础使用 基础配置工作区-暂存区-版本库添加文件修改文件版本回退撤销修改删除文件分支管理强制删除分支 基础配置 初始化仓库: git init # 此时就会生成一个 .git 的文件夹,切勿修改或删除文件夹里的内容配置仓库——名字: git config…

系统与网络安全------网络应用基础(2)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 交换机 认识交换机 交换机,Switch 用户将多台计算机/交换机连接在一起,组建网络 交换机负责为其中任意两台计算机提供独享线路进行通信 非网管型交换机 即插即用交换机 即插即用&…

【xiaozhi赎回之路-2:语音可以自己配置就是用GPT本地API】

固件作用 打通了网络和硬件的沟通 修改固件实现【改变连接到小智服务器的】 回答逻辑LLM自定义 自定义了Coze(比较高级,自定义程度比较高,包括知识库,虚拟脚色-恋人-雅思老师-娃娃玩具{可能需要使用显卡对开源模型进行微调-产…

蓝桥杯——嵌入式学习日记

因为lED和LCD共用PC8~PC15引脚,要通过锁存(LE)和(GPIOC->ODR)来避免LED和LCD引脚冲突 修改点: main.c中,GPIO初始化引脚后,LE(PD2引脚低电平锁存,退出透明模式&…

Liunx系统Microsoft SQL Server数据库还原

1.确认Linux系统已安装SQLServer服务并启动 2.在Windows中使用SSMS连接原数据库与Linux远程数据库服务 3.备份 成功备份如下 4.上传bak文件到远程Linux服务器 登陆Linux服务并创建数据库文件夹 退出Linux服务

【学习资源】多元时序分析问题和时序图模型

工业数据分析领域中,多元时序数据分析是一个广泛的问题。今天和大家简单介绍多元时序预测、聚类、分类、时序图模型和相应的深度学习库。 图片来源:https://www.researchgate.net/publication/349207209_Multivariate_Time-Series_Anomaly_Detection_via…

QT二 QT使用generate form 生成常用UI,各种UI控件

一 。没有使用general form 和 使用 general form 后,file层面和代码层面的不同比较 file层面的不同 代码层面的不同, 在 使用了general form之后,在主界面的构造方法中,使用ui->setupUi(this),就完成了所有UI的处理。 而之…

Haption力反馈遥操作机器人:6自由度高精度技术,定义远程操作新标准

Haption在力反馈遥操作机器人技术领域展现了强大的创新能力。其核心技术——力反馈技术,通过提供高度逼真的触觉反馈,显著提升了远程操作的精确性与用户体验。这种技术在工业、医疗等高要求场景中表现出色,同时也为科研和教育领域提供了有力支…

魔塔社区的torch_empty错误问题的解决办法

前言 我在运行魔塔社区(modelscope)的ZhipuAI/chatglm3-6b模型(智谱)的实例程序的时候,碰到了一个奇怪的错误(torch.empty),我尝试解决了一下。 (当前采用的Python版本…

全面了解 Cookies、Session 和 Token

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

51c自动驾驶~合集26

我自己的原文哦~ https://blog.51cto.com/whaosoft/11968755 #大模型/Sora/世界模型之间是什么关系 1 什么是大模型 人工智能大模型(Artificial Intelligence Large Model,简称AI大模型)是指具有庞大的参数规模和复杂程度的机器学习模…

分布式环境下的重复请求防护:非Redis锁替代方案全解析

目录 引言 方案一:前端防护策略 方案二:后端协同控制 方案三:流量控制与过滤 滑动窗口限流 布隆过滤器 方案四:基于框架的实践方案 多层防护策略与最佳实践 总结 引言 在Web应用开发中,防止用户重复点…

4.1 C#获取目录的3个方法的区别

C#中常用有如下3个获取目录的方式如下 1.Directory.GetCurrentDirectory():获取当前工作目录,工作目录可能被用户或其他代码修改。尽量少用。(似乎只要在运行中使用另存为或者打开某个文件夹,当前工作目录就修改) 2.Application…

【漏洞复现】Next.js中间件权限绕过漏洞 CVE-2025-29927

什么是Next.js? Next.js 是由 Vercel 开发的基于 React 的现代 Web 应用框架,具备前后端一体的开发能力,广泛用于开发 Server-side Rendering (SSR) 和静态站点生成(SSG)项目。Next.js 支持传统的 Node.js 模式和基于边…

MCU-芯片时钟与总线和定时器关系,举例QSPI

时钟源: 时钟源为系统时钟提供原始频率信号,系统时钟则通过(分频、倍频、选择器)成为整个芯片的“主时钟”,驱动 CPU 内核、总线(AHB、APB)及外设的运行。 内部时钟源: HSI&#x…

使用 ByteDance 的 UI-TARS Desktop 探索 AI 驱动的 GUI 自动化新前沿

文章目录 UI-TARS Desktop 是什么?技术亮点应用场景如何快速上手?与其他技术的对比未来展望结语 随着人工智能技术的快速发展,AI 正在从单纯的文本生成和图像识别迈向更复杂的交互场景。ByteDance 近期推出的 UI-TARS Desktop(基于…

DockerFile制作镜像(Dockerfile Creates an Image)

DockerFile制作镜像 hub.docker.com 搜索到的 Redis官方镜像,提示我们可以创建自己的 DockerFile 来添加 redis.conf 文件: 于是,我准备进行首次 DockerFile 的制作尝试。 一、准备工作 1.1 下载 redis.conf 我的方案是从 GitHub 上下载 …

C++List模拟实现|细节|难点|易错点|全面解析|类型转换|

目录 1.模拟代码全部 2.四大块代码理解 1.最底层&#xff1a;ListNode部分 2.第二层&#xff1a;ListIterator部分 3.第三层&#xff1a;ReserveListIterator部分 4最终层&#xff1a;List 1.模拟代码全部 using namespace std; template<class T> struct ListNode …