• 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 (*WaitGroupWrapper) Wrap(cb func()) {
        w.Add(1)
        go func() {
            cb()
            w.Done()
        }()
    }

  • 相关阅读:
    indexOf--之美
    uniapp_切换主题
    ueditor调用其中的附件上传功能
    php7 编译安装 apache
    快速排序单循环
    插入排序
    走进svg
    phpstorm内网远程debug
    sass&compass&grunt
    centos7+nginx 1.9.0+php-fpm+phpstorm+xdebug+vmware开发环境搭建
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7456953.html
Copyright © 2020-2023  润新知