分享
  1. 首页
  2. 文章

go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go

baiyuxiong · · 3435 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

上一篇文章:go语言nsq源码解读三 nsqlookupd源码nsqlookupd.go主要读了nsqlookupd.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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3435 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏