分享
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
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,
}
}
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
2
3
4
5
6
7
8
9
package nsqlookupd
//
//根据Context的命名,指环境、上下文的意思。通俗来讲,就是保存一些运行环境的信息
//从下面的定义可以看出,Context只是包含了NSQLookupd的指针
//
type Context struct {
nsqlookupd *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
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()
}()
}
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
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
上一篇文章: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
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,
}
}
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
2
3
4
5
6
7
8
9
package nsqlookupd
//
//根据Context的命名,指环境、上下文的意思。通俗来讲,就是保存一些运行环境的信息
//从下面的定义可以看出,Context只是包含了NSQLookupd的指针
//
type Context struct {
nsqlookupd *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
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()
}()
}
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()
}()
}