最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

nsq nsqlookupd代码解析(一)

golang 12浏览 0评论

之前的文章nsq安装【推荐阅读:nsq消息队列安装测试】,最后执行了./test.sh,这个脚本其实就遍历文件夹build go程序,具体遍历了apps和bench文件夹的程序
这里主要讲nsqlookupd
build这个github.com/nsqio/nsq/apps/nsqlookupd/nsqlookupd.go程序

这个文件主要使用了go-svc的包
github地址:https://github.com/judwhite/go-svc
运行一下他的Example我猜测Init方法应该跟init方法等同,之后执行Start方法,当执行关闭的时候执行Stop方法

代码清单github.com/nsqio/nsq/apps/nsqlookupd/nsqlookupd.go

func (p *program) Start() error {
    opts := nsqlookupd.NewOptions()

    flagSet := nsqlookupdFlagSet(opts)
    flagSet.Parse(os.Args[1:])

    if flagSet.Lookup("version").Value.(flag.Getter).Get().(bool) {
        fmt.Println(version.String("nsqlookupd"))
        os.Exit(0)
    }

    var cfg map[string]interface{}
    configFile := flagSet.Lookup("config").Value.String()
    if configFile != "" {
        _, err := toml.DecodeFile(configFile, &cfg)
        if err != nil {
            log.Fatalf("ERROR: failed to load config file %s - %s", configFile, err.Error())
        }
    }

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

    daemon.Main()
    p.nsqlookupd = daemon
    return nil
}

开在执行nsqlookupd包中的NewOptions方法,加载配置NewOptions方法文件github.com/nsqio/nsq/nsqlookupd/options.go
nsqlookupdFlagSet 如果参数中带有要修改参数配置就修改
daemon := nsqlookupd.New(opts)执行到github.com/nsqio/nsq/nsqlookupd/nsqlookupd.go的返回NSQLookupd对象,这个时候才执行到nsqlookupd包
daemon.Main()执行nsqlookupd的Main方法,开始执行nsqlookupd核心代码,

如果执行看github.com/nsqio/nsq/nsqlookupd/nsqlookupd.go文件你会发现有个Exit方法,刚开始我不明白什么时候会执行,现在明白是go-svc这个包的执行的,在github.com/nsqio/nsq/apps/nsqlookupd/nsqlookupd.go文件中有如下代码,进程关闭的时候会执行Stop,之后就执行nsqlookupd的Exit方法

func (p *program) Stop() error {
    if p.nsqlookupd != nil {
        p.nsqlookupd.Exit()
    }
    return nil
}
QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» nsq nsqlookupd代码解析(一)
本文链接地址:https://www.phpsong.com/3293.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!