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:/ ...
随机推荐
- ubuntu下ruby文件执行蛋疼的一个问题
ubuntu下面用sublime打开非常简单的一段代码(其实不算代码,因为没有实际语句): #!/usr/bin/ruby 在shell下加入x权限:chmod u+x doit.rb,然后运行 ./ ...
- 二、添加 Insert into
文档目录 开始使用 初始化查询实例: LambdaToSql.SqlClient DB = new LambdaToSql.SqlClient(); 添加实体数据 ", IP = &quo ...
- Gulp基础知识
首先,我们需要了解Gulp能做些什么? 编译 sass sass是什么?(使CSS可以用编程的方式写,加快我们开发的速度) ...
- 记一次erlang语言bug导致rabbitmq的队列没有消费者的问题
公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10.集群条件下稳定使用了近一年时间,没什么问题. 为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后 ...
- Day4_迭代器
迭代器: 是一个重复的过程,每一次重复都是基于上一次的结果而来. 可迭代对象: 凡是对象有_iter_方法(对象._iter_),该对象就是可迭代对象. 字符串,列表,元组,字典等都是可迭代对象. 可 ...
- mybatis源码解读(二)——构建Configuration对象
Configuration 对象保存了所有mybatis的配置信息,主要包括: ①. mybatis-configuration.xml 基础配置文件 ②. mapper.xml 映射器配置文件 1. ...
- Ubuntu本地uwsgi配Django问题的解决
版本Ubuntu14.04,Django1.6.5 ubuntu本地Uwsgi调Django可能会报错: -- unavailable modifier requested: 0 -- 解决方法:先安 ...
- TabLayout:另一种Tab的实现方式
http://blog.csdn.NET/aigestudio/article/details/47155769 在5.0以前我们想要实现像网易新闻客户端那样的的Tab可以有很多种选择: 比如古老的T ...
- HDU-5738
Eureka Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- Mysql研磨之InnoDB行锁模式
事务并发带来的一些问题 (1)更新丢失(LostUpdate):当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题最后的更新覆盖了由其 ...