博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nsqlookupd 入口文件分析
阅读量:5964 次
发布时间:2019-06-19

本文共 1466 字,大约阅读时间需要 4 分钟。

  hot3.png

nsq 中 nsqlookupd 角色相对简单,适合作为分析 nsq 的入口
apps/nsqlookupd/nsqlookupd.go
nsqlookupd 是一个独立的程序,所以放到 apps 目录下,依赖内部包 nsqlookupd, util,外部包:
     # TOML是一种配置文件规范,此包是golang的解析包
     # 把命令行和配置文件参数注入到struct中的工具包,只有一个文件
关键代码解析
1、全局变量定义
go 中命令行参数成为 flag,flag 的集合成为 FlagSet,解析命令行参数之前需要先创建 FlagSet,定义每一个 flag,如下面的全局变量所示,同时提供了重要的默认值
var (
     flagSet = flag.NewFlagSet("nsqlookupd", flag.ExitOnError)
     config      = flagSet.String("config", "", "path to config file")
     ///
)
2、命令行参数解析
flagSet.Parse(os.Args[1:])
os.Args 是所有的命令行参数;os.Args[0] 是执行程序的全路径名;
flagSet.Parse 解析命令行参数,覆盖 flagSet 中的 flag 默认定义
3、nsqlookupd 进程退出方式
定义了两个 chan,signalChan 接收OS发送的退出信号,匿名协程收到数据时,往 exitChan 发送一个 1,此时等待在 exitChan 上的主协程调用 nsqlookupd 的 Exit 方法
signalChan := make(chan os.Signal, 1)
exitChan := make(chan int)
go func() {
    <-signalChan
    exitChan <- 1
}()
// 告诉 golang 运行时,收到的退出,中断信号传递给 signalChan 通道
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
<-exitChan     // 等待退出信号
daemon.Exit()
总结:这种退出方式比较优雅,能够在退出之前做些收尾工作,清理任务和垃圾
4、读取配置文件
var cfg map[string]interface{}
_, err := toml.DecodeFile(*config, &cfg)
详细的 toml 使用文档,参考 toml 的 github
5、创建 nsqlookupd 配置选项的结构体 nsqlookupdOptions
opts := nsqlookupd.NewNSQLookupdOptions()
6、解析命令行参数 flagSet 和 配置文件参数 cfg 到 opts 中
options.Resolve(opts, flagSet, cfg)     // 使用了 
 库
解析时,会查找 opts 定义的 flag tag;优先使用命令行参数,配置文件次之。
7、创建 nsqlookupd 的结构体 NSQLookupd,包含有所有的必要信息,命令行参数 和 默认值
daemon := nsqlookupd.NewNSQLookupd(opts)
8、启动 nsqlookupd
daemon.Main() 

转载于:https://my.oschina.net/astute/blog/296955

你可能感兴趣的文章
Facebook 接入之获取各个配置参数
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
2013 Linux领域年终盘点
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
org.openqa.selenium.StaleElementReferenceException
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>