Golang熱載入配置實踐

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

前言

生產環境上所輸出的記錄層級較高不利於定位,會碰到這樣一種情境,我們改配置修改記錄層級,再重啟,以期望定位問題,然而問題重啟後不浮現了,所以熱載入配置有必要添進去。

實踐

直接上代碼:

package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os"    "os/signal"    "syscall"    "time")type Config struct {    Mode string `json:"Mode"`}var (    config     *Config)func loadConfig() {    f, err := ioutil.ReadFile("config.json")    if err != nil {        fmt.Println("[TEST_SIGUSR] Load config: ", err)    }    err = json.Unmarshal(f, &config)    if err != nil {        fmt.Println("[TEST_SIGUSR] Para config failed: ", err)    }}func init() {    loadConfig()    fmt.Println("[TEST_SIGUSR] Load config;Mode: ", config.Mode)    s := make(chan os.Signal, 1)    signal.Notify(s, syscall.SIGUSR2)    go func() {            for {            <-s            loadConfig()            fmt.Println("[TEST_SIGUSR] ReLoad config;Mode: ", config.Mode)        }    }()}func main() {    q := make(chan os.Signal, 1)    signal.Notify(q, syscall.SIGINT)    for {        select {        case <-q:            fmt.Println("[TEST_SIGUSR] ---ibye----")            os.Exit(1)        default:        }        fmt.Println("[TEST_SIGUSR] ---waiting to reload----")        time.Sleep(time.Second * 2)    }}

檔案目錄如下:

wenhao-MA:test_sigusr wenhao$ lltotal 4944-rw-r--r--  1 wenhao  staff       18 11 22 13:39 config.json-rwxr-xr-x  1 wenhao  staff  2520352 11 22 13:41 sigusr-rw-r--r--  1 wenhao  staff      973 11 22 13:47 sigusr.go
wenhao-MA:test_sigusr wenhao$ cat config.json{"Mode":"Debug"}

編譯啟動後,修改config.jsonMode值,kill -USR2 $(pidof sigusr)
結果:

wenhao-MA:test_sigusr wenhao$./sigusr [TEST_SIGUSR] Load config;Mode:  Debug[TEST_SIGUSR] ---waiting to reload----[TEST_SIGUSR] ---waiting to reload----[TEST_SIGUSR] ReLoad config;Mode:  ERROR

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.