go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go
本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go、context.go和wait_group_wrapper.go。
options.go
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package nsqlookupd
import ( "log" "os" "time" ) type nsqlookupdOptions struct { Verbose bool `flag:"verbose"` //是否开启啰嗦模式,开启后,会打很多LOG,一般在调试或定位问题时使用。 TCPAddress string `flag:"tcp-address"` //TCP监听地址 HTTPAddress string `flag:"http-address"` //HTTP监听地址 BroadcastAddress string `flag:"broadcast-address"` //这个lookup节点的对外地址 //producer的交互超时时间,默认是5分钟。就是说,如果5分钟内nsqlookupd没有收到producer的PING(类似心跳包),则会认为producer已掉线。 InactiveProducerTimeout time.Duration `flag:"inactive-producer-timeout"` //字面直译是墓碑时间 //在nsqadmin的http界面中访问/tombstone_topic_producer URL时,nsqlookupd会给producer TombstoneLifetime长度的时间来注销 //默认为45秒,在这45秒内,producer不会再被任何consumer通过nsqadmin的/lookup操作找到,同时producer还会进行删除topic等操作。 //45秒之后,producer就会与nsqlookupd断开连接,同时通过nsqlookupd TCP连接中的UNREGISTER操作在数据记录中把该producer删除。 TombstoneLifetime time.Duration `flag:"tombstone-lifetime"` } // //新建nsqlookupdOptions类型的变量的指针 // func NewNSQLookupdOptions() *nsqlookupdOptions { //获取主机名 hostname, err := os.Hostname() if err != nil { log.Fatal(err) } //返回nsqlookupdOptions类型的变量,并指定默认参数。 return &nsqlookupdOptions{ //TCP监听本机的4160端口 TCPAddress: "0.0.0.0:4160", //HTTP监听本机的4161端口 HTTPAddress: "0.0.0.0:4161", //主机名 BroadcastAddress: hostname, //5分钟超时 InactiveProducerTimeout: 300 * time.Second, //45秒 TombstoneLifetime: 45 * time.Second, } } |
context.go
|
1
2 3 4 5 6 7 8 9 |
package nsqlookupd
// //根据Context的命名,指环境、上下文的意思。通俗来讲,就是保存一些运行环境的信息 //从下面的定义可以看出,Context只是包含了NSQLookupd的指针 // type Context struct { nsqlookupd *NSQLookupd } |
wait_group_wrapper.go
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package util
import ( "sync" ) // //本文件是对WaitGroup的封装,关于WaitGroup,根据字义,wait是等待的意思,group是组、团体的意思,合起来就是指等待一个组。 //即指,当一个组里所有的操作都完成后,才会继续执行。 //可以参考http://www.baiyuxiong.com/?p=913理解WaitGroup用法 // type WaitGroupWrapper struct { sync.WaitGroup } func (w *WaitGroupWrapper) Wrap(cb func()) { w.Add(1) go func() { cb() w.Done() }() } |
go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go的更多相关文章
- go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go
从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...
- go语言nsq源码解读五 nsqlookupd源码registration_db.go
本篇将讲解registration_db.go文件. 1234567891011121314151617181920212223242526272829303132333435363738394041 ...
- (转)go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
转自:http://www.baiyuxiong.com/?p=886 ---------------------------------------------------------------- ...
- Bert系列 源码解读 四 篇章
Bert系列(一)——demo运行 Bert系列(二)——模型主体源码解读 Bert系列(三)——源码解读之Pre-trainBert系列(四)——源码解读之Fine-tune 转载自: https: ...
- DRF(1) - REST、DRF(View源码解读、APIView源码解读)
一.REST 1.什么是编程? 数据结构和算法的结合. 2.什么是REST? 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下: /books/ /get_all_books/ 访问所 ...
- REST、DRF(View源码解读、APIView源码解读)
一 . REST 前言 1 . 编程 : 数据结构和算法的结合 .小程序如简单的计算器,我们输入初始数据,经过计算,得到最终的数据,这个过程中,初始数据和结果数据都是数据,而计算 ...
- Restful 1 -- REST、DRF(View源码解读、APIView源码解读)及框架实现
一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? - url用来唯一定位资源,http请求方式来区分用户行为 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下 ...
- go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
nsqlookupd: 官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html 用官方话来讲是:nsqlookupd管理拓扑信息,客 ...
- Python Web Flask源码解读(四)——全局变量
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
随机推荐
- Xcode使用心得03:打开僵尸(Zombie)模式
如果打开了ARC或垃圾回收模式,在程序中发消息给以及重新分配的对象,将会引起程序崩溃.这时定位崩溃原因将非常困难,因为出问题的对象已经重新分配了.一个解决的方法就是要求Xcode将对象设置为" ...
- rails小重构:将图片加入产品Model之二
在前面我们重构了product中图片的实现,但是还是有一些小问题.比如用户如果上传一个非图片格式的文件时的验证情况. 我们之前是将图片格式验证代码放在Picture类中: validates_form ...
- Android设计开发笔记
1.因为Android的开发是基于框架的开发:往对方指定的位置加代码:其运行的Message\Handler机制也决定了其单步跟踪也不方便,所以建立新代码时要多Log,这样不但便于调试,而且帮助你加深 ...
- ZAB协议(Zookeeper atomic Broadcast)
一.简语: ZAB协议是Paxos算法的经典实现 二.ZAB协议的两种模式: 崩溃恢复: 1.每个server都有一张选票(myid,zxid),选票投给自己 2.收集所有server的投票 3.比较 ...
- C 上传文件到服务器(含接收端源码)
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1067 实例向大家展示了如何用Visua ...
- Java并发-取消与关闭
如果外部代码可以再某个操作正常完成之前就将其置入"完成"状态,那么这个操作就是可以取消的.取消的原因有:用户请求取消.有时间限制的操作.应用程序事件.错误和关闭等 中断 如果使用某 ...
- html块级元素与行内元素
1.关于行内元素和快元素的说明: 根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display ...
- C入门语言基础一[可移植性、涉及的三种文件、编程7个步骤、编译器、链接器]
Review Questions What dose portability mean in the context of programming? 文中讲到的可移植性是什么意思? C本身是不涉及 ...
- (一)SpringBoot基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
- python爬虫入门(三)XPATH和BeautifulSoup4
XML和XPATH 用正则处理HTML文档很麻烦,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. XML 指可扩展标记语言(EXtensible Ma ...