nsq源码地址:https://github.com/nsqio/nsq
版本1.1.0
NSQ源码分析系列是我通过阅读nsq的源码及结合网上的相关文章整理而成,由于在网上没有找到很详细和完整的文章,故自己亲自整理了一份。如果有错误的地方,还请指正,希望这系列的文章给您带来帮助。
NSQD启动流程
nsqd的启动流程在nsq/apps/nsqd/nsqd.go中的Start()函数,以下为初始化流程
1.调用nsqd.NewOptions()加载参数及参数的默认值
2.将用户配置的参数值设置到对应的参数
3.随后判断config参数是否存在,若存在的话还需进行配置文件的读取, 如果配置文件存在并且符合toml格式,则调用cfg.Validate对配置文件的各项进行进一步的合法性检查
4.调用nsqd.New(opts),初始化NSQD结构体,并检验Options配置信息是否有误
5.调用LoadMetadata(),主要是加载元数据信息
6.调用PersistMetadata(),主要将元数据持久化到文件中
5.调用nsqd.Main(),启动nsqd服务
ps:后面会详细介绍各个启动流程
func (p *program) Start() error {
opts := nsqd.NewOptions()
flagSet := nsqdFlagSet(opts)
flagSet.Parse(os.Args[1:])
rand.Seed(time.Now().UTC().UnixNano())
if flagSet.Lookup("version").Value.(flag.Getter).Get().(bool) {
fmt.Println(version.String("nsqd"))
os.Exit(0)
}
var cfg config
configFile := flagSet.Lookup("config").Value.String()
if configFile != "" {
_, err

最低0.47元/天 解锁文章
443

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



