nsqd启动入口

nsqd的启动代码入口在apps/nsqd/nsqd.go

apps/nsqd/nsqd.go

nsq使用svc包来控制nsqd守护进程的启停

type program struct {
    nsqd *nsqd.NSQD
}

func main() {
    prg := &program{}
    if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil {
        log.Fatal(err)
    }
}

func (p *program) Init(env svc.Environment) error {...}

func (p *program) Start() error {...}

func (p *program) Stop() error {...}

svc包能让程序安全的推出,从代码中看出nsqd接收两个信号可退出:SIGINT(输入任意健) 和 SIGTERM(kill)。

重要逻辑均在Start()函数中,该函数主要做了三件事

  1. 接收命令行参数,根据参数创建nsqd结构
  2. 加载消息和持久化消息
  3. 调用nsqd.Main()启动
opts := nsqd.NewOptions()

该函数创建一个默认的nsqd参数

options.Resolve(opts, flagSet, cfg)
nsqd := nsqd.New(opts)

利用flag包读取命令行参数后,根据参数生成nsqd结构。

err := nsqd.LoadMetadata()
err = nsqd.PersistMetadata()

然后加载消息和持久化消息

nsqd.Main()

最后调用nsqd.Main()函数执行最重要的启动逻辑

你可能感兴趣的:(nsqd启动入口)