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()

}()

}