美文网首页
nsqd启动入口

nsqd启动入口

作者: fake_smile_boy | 来源:发表于2018-12-10 10:06 被阅读0次

    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启动入口

          本文链接:https://www.haomeiwen.com/subject/zmbitqtx.html