远飞闲记

阅读、思考、技术

Golang中配置文件热重载方案

🗓️发布日期:2022-06-23 · 🗺️总字数: 467 字 · ⏱️阅读时间: 1 Minute

最近用Golang写Web微服务应用,在开发过程中有需求是对本地配置服务器配置文件需要解析读取进内存待程序逻辑调用,但项目的配置文件数据都是通过excel表来进行管理的,需要导出成Json文件进行解析在应用服务器逻辑中把数据读取进内存或Redis中进行缓存,由此就产生了需要对配置文件热重载的必要性。

热重载的意思就是在不重启应用的情况下对配置文件的更改后实时读取到内存中或刷新Redis及时生效,更改为这种方案的优点就不阐述了但也有一些缺点就是如果不能保证修改配置文件的准确性那么会有很大机会导致运行的服务崩溃 👽 ,但这里也可以通过工具预先对需要读取的配置文件数据进行校验然后在导入到运行的应用中来避免以上缺点.

代码实现思路

通过比对文件的MD5码进行校验是否需要更新对应配置文件的数据,获取MD5代码参见如下:

  //返回文件的MD5码
  func FileToMD5(filePath string) (string, error) {
    file, err := os.Open(filePath)
    if err != nil {
      return "", err
    }
    hash := md5.New()
    _, _ = io.Copy(hash, file)
    return hex.EncodeToString(hash.Sum(nil)), nil
  }

获取后文件 MD5 字串可以进行本地保存临时文件中或缓存进Redis,通过Golang并发或 Cron 库进行每秒的刷新监听刷新对应的修改配置文件到内存数据中。

🏷️ Go