91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現nsqlookupd入口文件分析

發布時間:2021-12-29 11:57:43 來源:億速云 閱讀:152 作者:柒染 欄目:云計算

這期內容當中小編將會給大家帶來有關如何實現nsqlookupd入口文件分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

nsq 中 nsqlookupd 角色相對簡單,適合作為分析 nsq 的入口

apps/nsqlookupd/nsqlookupd.go

nsqlookupd 是一個獨立的程序,所以放到 apps 目錄下,依賴內部包 nsqlookupd, util,外部包:

github.com/BurntSushi/toml      # TOML是一種配置文件規范,此包是golang的解析包 

github.com/mreiferson/go-options      # 把命令行和配置文件參數注入到struct中的工具包,只有一個文件 

關鍵代碼解析

1、全局變量定義

go 中命令行參數成為 flag,flag 的集合成為 FlagSet,解析命令行參數之前需要先創建 FlagSet,定義每一個 flag,如下面的全局變量所示,同時提供了重要的默認值

var (

     flagSet = flag.NewFlagSet("nsqlookupd", flag.ExitOnError)

     config      = flagSet.String("config", "", "path to config file")

     ///////////////

)

2、命令行參數解析

flagSet.Parse(os.Args[1:])

os.Args 是所有的命令行參數;os.Args[0] 是執行程序的全路徑名;

flagSet.Parse 解析命令行參數,覆蓋 flagSet 中的 flag 默認定義

3、nsqlookupd 進程退出方式

定義了兩個 chan,signalChan 接收OS發送的退出信號,匿名協程收到數據時,往 exitChan 發送一個 1,此時等待在 exitChan 上的主協程調用 nsqlookupd 的 Exit 方法

signalChan := make(chan os.Signal, 1)

exitChan := make(chan int)

go func() {

    <-signalChan

    exitChan <- 1

}()

// 告訴 golang 運行時,收到的退出,中斷信號傳遞給 signalChan 通道

signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

<-exitChan     // 等待退出信號

daemon.Exit()

總結:這種退出方式比較優雅,能夠在退出之前做些收尾工作,清理任務和垃圾

4、讀取配置文件

var cfg map[string]interface{}

_, err := toml.DecodeFile(*config, &cfg)

詳細的 toml 使用文檔,參考 toml 的 github

5、創建 nsqlookupd 配置選項的結構體 nsqlookupdOptions

opts := nsqlookupd.NewNSQLookupdOptions()

6、解析命令行參數 flagSet 和 配置文件參數 cfg 到 opts 中

options.Resolve(opts, flagSet, cfg)     // 使用了  go-options  庫

解析時,會查找 opts 定義的 flag tag;優先使用命令行參數,配置文件次之。

7、創建 nsqlookupd 的結構體 NSQLookupd,包含有所有的必要信息,命令行參數 和 默認值

daemon := nsqlookupd.NewNSQLookupd(opts)

8、啟動 nsqlookupd

daemon.Main() 

上述就是小編為大家分享的如何實現nsqlookupd入口文件分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟连| 巢湖市| 定兴县| 明水县| 灵石县| 海原县| 获嘉县| 武安市| 桑日县| 江源县| 府谷县| 长海县| 海丰县| 昌吉市| 沅陵县| 息烽县| 独山县| 沾益县| 清水县| 柯坪县| 内丘县| 青海省| 屏边| 南木林县| 漠河县| 吉木乃县| 朔州市| 韩城市| 汤阴县| 光山县| 卢湾区| 黔西| 永兴县| 常熟市| 华蓥市| 乌拉特后旗| 大方县| 海门市| 永州市| 香格里拉县| 宁阳县|