go語言 nsq源碼解讀四 nsqlookupd源碼options.go、context.go和wait_group_wrapper.go

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

上一篇文章: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()
    }()
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.