资源下载 - 从此开始!

下载我_精品源码软件教程资源网

您的位置:首页 > 网络学院 > 正文

golang使用信号量热更新怎么实现

2018-05-01 01:11 来源:www.xiazaiwo.net 编辑:admin

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

打赏一下,我们会为大家提供更多优质资源!

相关文章,95%的人会看!{有内幕、有真相...}

看过本文的人还看过

关闭

微信扫一扫

站长微信账号