首页 > 编程 > Golang > 正文

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

2020-04-01 18:57:35
字体:
来源:转载
供稿:网友

配置文件热更新是服务器程序的一个基本功能,通过热更新可以不停机调整程序的配置,特别是在生产环境可以提供极大的便利,比如发现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 {} } 

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表