本博客与RayXXZhang的博客保持同步更新,转载请注明来自RayXXZhang的博客-nsq源码阅读笔记之nsqd(一)——nsqd的配置解析和初始化
配置解析
nsqd的主函数位于apps/nsqd.go中的main函数
flagSet := nsqFlagset()
flagSet.Parse(os.Args[1:])
首先main函数调用nsqFlagset和Parse进行命令行参数集初始化,
然后判断version参数是否存在,若存在,则打印版本号并退出程序
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
//...
<-signalChan
nsqd.Exit()
接下来钩住系统的syscall.SIGINT和syscall.SIGTERM消息,用来阻塞主goroutine防止退出
var cfg config
configFile := flagSet.Lookup("config").Value.String()
if configFile != "" {
_, err := toml.DecodeFile(configFile, &cfg)
if err != nil {
log.Fatalf(

本文详细介绍了nsqd的配置解析过程,包括命令行参数、配置文件的读取与合并,以及对tls选项的合法性检查。接着,文章讲解了nsqd的初始化阶段,涉及LoadMetadata和PersistMetadata两个关键函数,用于加载和持久化元数据。LoadMetadata函数从nsqd的.dat文件中加载topic和channel信息,检查其合法性并调整状态。而PersistMetadata则将当前的topic和channel信息写回文件。最后,Main函数启动nsqd,监听端口,并启动各个组件,主goroutine在接收到中断信号后执行关闭操作。
最低0.47元/天 解锁文章
2597

被折叠的 条评论
为什么被折叠?



