• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang使用信号量热更新的实现示例

    配置文件热更新是服务器程序的一个基本功能,通过热更新可以不停机调整程序的配置,特别是在生产环境可以提供极大的便利,比如发现log打得太多了可以动态调高日志等级,业务逻辑参数变化,甚至某个功能模块的开关等都可以动态调整。

    package main  
    import ( 
      "encoding/json" 
      "fmt" 
      "io/ioutil" 
      "log" 
      "os" 
      "os/signal" 
      "sync" 
      "syscall" 
    ) 
     
    //用json配置测试 
    type Config struct { 
      Test1 string `json:"Test1:` 
      Test2 int  `json:"Test1:` 
    } 
     
    var ( 
      config   *Config 
      configLock = new(sync.RWMutex) 
    ) 
     
    func loadConfig() bool { 
      f, err := ioutil.ReadFile("config.json") 
      if err != nil { 
        fmt.Println("load config error: ", err) 
        return false 
      } 
     
      //不同的配置规则,解析复杂度不同 
      temp := new(Config) 
      err = json.Unmarshal(f, config) 
      if err != nil { 
        fmt.Println("Para config failed: ", err) 
        return false 
      } 
     
      configLock.Lock() 
      config = temp 
      configLock.Unlock() 
      return true 
    } 
     
    func GetConfig() *Config { 
      configLock.RLock() 
      defer configLock.RUnlock() 
      return config 
    } 
     
    func init() { 
      if !loadConfig() { 
        os.Exit(1) 
      } 
     
      //热更新配置可能有多种触发方式,这里使用系统信号量sigusr1实现 
      s := make(chan os.Signal, 1) 
      signal.Notify(s, syscall.SIGUSR1) 
      go func() { 
        for { 
          -s 
          log.Println("Reloaded config:", loadConfig()) 
        } 
      }() 
    } 
     
    func main() { 
      select {} 
    } 

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • golang监听文件变化的实例
    • Golang信号处理及如何实现进程的优雅退出详解
    • golang模拟实现带超时的信号量示例代码
    • golang 监听服务的信号,实现平滑启动,linux信号说明详解
    上一篇:解读golang plugin热更新尝试
    下一篇:golang package time的用法具体详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang使用信号量热更新的实现示例 golang,使用,信号,量热,更,