golang使用信号量热更新
发布时间:2020-12-16 19:13:26 所属栏目:大数据 来源:网络整理
导读:package mainimport ( "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))fu
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 {}
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
