nsqlookupd 源码阅读(1)
daemon的启动过程
1. Init
2. start
func (p *program) Start() error {
opts := nsqlookupd.NewOptions()
flagSet := nsqlookupdFlagSet(opts)
.......
.......
daemon := nsqlookupd.New(opts)
daemon.Main()
p.nsqlookupd = daemon
return nil
}
(1) 首先new一个options结构
type Options struct {
// 日志等级
LogLevel string `flag:"log-level"`
// 日志前缀
LogPrefix string `flag:"log-prefix"`
// true 使用LogLevel 来设定日志等级,false 不允许,默认是DEBUG
Verbose bool `flag:"verbose"` // for backwards compatibility
// 日志接口
Logger Logger
// 根据LogLevel 和 Verbose 来得到的真正的日志等级
logLevel lg.LogLevel // private, not really an option
// 监听的tcp地址
TCPAddress string `flag:"tcp-address"`
// 监听的http的地址
HTTPAddress string `flag:"http-address"`
// 广播地址默认是 主机名hostname
BroadcastAddress string `flag:"broadcast-address"`
// 从上一次ping之后 生产者驻留在nsqlookup的时长
InactiveProducerTimeout time.Duration `flag:"inactive-producer-timeout"`
// tombstone的驻留时长
TombstoneLifetime time.Duration `flag:"tombstone、、 tombstone的驻留时长-lifetime"`
}
func NewOptions() *Options {
hostname, err := os.Hostname()
if err != nil {
log.Fatal(err)
}