golang使用信號量熱更新的實(shí)現(xiàn)示例
配置文件熱更新是服務(wù)器程序的一個(gè)基本功能,通過熱更新可以不停機(jī)調(diào)整程序的配置,特別是在生產(chǎn)環(huán)境可以提供極大的便利,比如發(fā)現(xiàn)log打得太多了可以動(dòng)態(tài)調(diào)高日志等級,業(yè)務(wù)邏輯參數(shù)變化,甚至某個(gè)功能模塊的開關(guān)等都可以動(dòng)態(tài)調(diào)整。
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
}
//不同的配置規(guī)則,解析復(fù)雜度不同
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)
}
//熱更新配置可能有多種觸發(fā)方式,這里使用系統(tǒng)信號量sigusr1實(shí)現(xiàn)
s := make(chan os.Signal, 1)
signal.Notify(s, syscall.SIGUSR1)
go func() {
for {
<-s
log.Println("Reloaded config:", loadConfig())
}
}()
}
func main() {
select {}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Go語言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例
這篇文章主要介紹了Go語言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang 獲取系統(tǒng)信息的實(shí)現(xiàn)
本文主要介紹了Golang 獲取系統(tǒng)信息的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Golang標(biāo)準(zhǔn)庫和外部庫的性能比較
這篇文章主要介紹Golang標(biāo)準(zhǔn)庫和外部庫的性能比較,下面文章講圍繞這兩點(diǎn)展開內(nèi)容,感興趣的小伙伴可以參考一下2021-10-10
基于Golang設(shè)計(jì)一套可控的定時(shí)任務(wù)系統(tǒng)
這篇文章主要為大家學(xué)習(xí)介紹了如何基于Golang設(shè)計(jì)一套可控的定時(shí)任務(wù)系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
Golang無限緩存channel的設(shè)計(jì)與實(shí)現(xiàn)解析
這篇文章主要為大家介紹了Golang無限緩存channel的設(shè)計(jì)與實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
SpringEvent優(yōu)雅解耦時(shí)連續(xù)兩個(gè)bug的解決方案
這篇文章主要為大家介紹了SpringEvent優(yōu)雅解耦時(shí)連續(xù)兩個(gè)bug的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

