欢迎来到代码驿站!

Golang

当前位置:首页 > 脚本语言 > Golang

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

时间:2021-06-15 09:15:53|栏目: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

下一篇:Go语言中TCP/IP网络编程的深入讲解

本文标题:golang使用信号量热更新的实现示例

本文地址:http://www.codeinn.net/misctech/142401.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有