package nsqd

import (
    "crypto/md5"
    "crypto/tls"
    "hash/crc32"
    "io"
    "log"
    "os"
    "time"
)

type Options struct {
    // basic options
    ID                       int64         `flag:"worker-id" cfg:"id"`
    Verbose                  bool          `flag:"verbose"`
    TCPAddress               string        `flag:"tcp-address"`
    HTTPAddress              string        `flag:"http-address"`
    HTTPSAddress             string        `flag:"https-address"`
    BroadcastAddress         string        `flag:"broadcast-address"`
    NSQLookupdTCPAddresses   []string      `flag:"lookupd-tcp-address" cfg:"nsqlookupd_tcp_addresses"`
    AuthHTTPAddresses        []string      `flag:"auth-http-address" cfg:"auth_http_addresses"`
    HTTPClientConnectTimeout time.Duration `flag:"http-client-connect-timeout" cfg:"http_client_connect_timeout"`
    HTTPClientRequestTimeout time.Duration `flag:"http-client-request-timeout" cfg:"http_client_request_timeout"`

    // diskqueue options
    DataPath        string        `flag:"data-path"`
    MemQueueSize    int64         `flag:"mem-queue-size"`
    MaxBytesPerFile int64         `flag:"max-bytes-per-file"`
    SyncEvery       int64         `flag:"sync-every"`
    SyncTimeout     time.Duration `flag:"sync-timeout"`

    QueueScanInterval        time.Duration
    QueueScanRefreshInterval time.Duration
    QueueScanSelectionCount  int
    QueueScanWorkerPoolMax   int
    QueueScanDirtyPercent    float64

    // msg and command options
    MsgTimeout    time.Duration `flag:"msg-timeout" arg:"1ms"`
    MaxMsgTimeout time.Duration `flag:"max-msg-timeout"`
    MaxMsgSize    int64         `flag:"max-msg-size" deprecated:"max-message-size" cfg:"max_msg_size"`
    MaxBodySize   int64         `flag:"max-body-size"`
    MaxReqTimeout time.Duration `flag:"max-req-timeout"`
    ClientTimeout time.Duration

    // client overridable configuration options
    MaxHeartbeatInterval   time.Duration `flag:"max-heartbeat-interval"`
    MaxRdyCount            int64         `flag:"max-rdy-count"`
    MaxOutputBufferSize    int64         `flag:"max-output-buffer-size"`
    MaxOutputBufferTimeout time.Duration `flag:"max-output-buffer-timeout"`

    // statsd integration
    StatsdAddress  string        `flag:"statsd-address"`
    StatsdPrefix   string        `flag:"statsd-prefix"`
    StatsdInterval time.Duration `flag:"statsd-interval" arg:"1s"`
    StatsdMemStats bool          `flag:"statsd-mem-stats"`

    // e2e message latency
    E2EProcessingLatencyWindowTime  time.Duration `flag:"e2e-processing-latency-window-time"`
    E2EProcessingLatencyPercentiles []float64     `flag:"e2e-processing-latency-percentile" cfg:"e2e_processing_latency_percentiles"`

    // TLS config
    TLSCert             string `flag:"tls-cert"`
    TLSKey              string `flag:"tls-key"`
    TLSClientAuthPolicy string `flag:"tls-client-auth-policy"`
    TLSRootCAFile       string `flag:"tls-root-ca-file"`
    TLSRequired         int    `flag:"tls-required"`
    TLSMinVersion       uint16 `flag:"tls-min-version"`

    // compression
    DeflateEnabled  bool `flag:"deflate"`
    MaxDeflateLevel int  `flag:"max-deflate-level"`
    SnappyEnabled   bool `flag:"snappy"`

    Logger Logger
}

func NewOptions() *Options {
    hostname, err := os.Hostname()
    if err != nil {
        log.Fatal(err)
    }

    h := md5.New()
    io.WriteString(h, hostname)
    defaultID := int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024)

    return &Options{
        ID: defaultID,

        TCPAddress:       "0.0.0.0:4150",
        HTTPAddress:      "0.0.0.0:4151",
        HTTPSAddress:     "0.0.0.0:4152",
        BroadcastAddress: hostname,

        NSQLookupdTCPAddresses: make([]string, 0),
        AuthHTTPAddresses:      make([]string, 0),

        HTTPClientConnectTimeout: 2 * time.Second,
        HTTPClientRequestTimeout: 5 * time.Second,

        MemQueueSize:    10000,
        MaxBytesPerFile: 100 * 1024 * 1024,
        SyncEvery:       2500,
        SyncTimeout:     2 * time.Second,

        QueueScanInterval:        100 * time.Millisecond,
        QueueScanRefreshInterval: 5 * time.Second,
        QueueScanSelectionCount:  20,
        QueueScanWorkerPoolMax:   4,
        QueueScanDirtyPercent:    0.25,

        MsgTimeout:    60 * time.Second,
        MaxMsgTimeout: 15 * time.Minute,
        MaxMsgSize:    1024 * 1024,
        MaxBodySize:   5 * 1024 * 1024,
        MaxReqTimeout: 1 * time.Hour,
        ClientTimeout: 60 * time.Second,

        MaxHeartbeatInterval:   60 * time.Second,
        MaxRdyCount:            2500,
        MaxOutputBufferSize:    64 * 1024,
        MaxOutputBufferTimeout: 1 * time.Second,

        StatsdPrefix:   "nsq.%s",
        StatsdInterval: 60 * time.Second,
        StatsdMemStats: true,

        E2EProcessingLatencyWindowTime: time.Duration(10 * time.Minute),

        DeflateEnabled:  true,
        MaxDeflateLevel: 6,
        SnappyEnabled:   true,

        TLSMinVersion: tls.VersionTLS10,

        Logger: log.New(os.Stderr, "[nsqd] ", log.Ldate|log.Ltime|log.Lmicroseconds),
    }
}

options.go的更多相关文章

  1. jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件

    支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...

  2. $.extend({},defaults, options) --(初体验三)

    1.$.extend({},defaults, options) 这样做的目的是为了保护包默认参数.也就是defaults里面的参数. 做法是将一个新的空对象({})做为$.extend的第一个参数, ...

  3. .NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

    配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置.值得推荐的做法就是采用<.NET Core采用的全新配置系统[1]: 读取 ...

  4. .NET Core采用的全新配置系统[4]: “Options模式”下各种类型的Options对象是如何绑定的?

    旨在生成Options对象的配置绑定实现在IConfiguration接口的扩展方法Bind上.配置绑定的目标类型可以是一个简单的基元类型,也可以是一个自定义数据类型,还可以是一个数组.集合或者字典类 ...

  5. HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)

    前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...

  6. datatables中的Options总结(3)

    datatables中的Options总结(3) 十.ColReorder colReorder.fixedColumnsLeft 不允许x列重新排序(从左数) colReorder.fixedCol ...

  7. datatables中的Options总结(2)

    datatables中的Options总结(2) 五.datatable,列 columnDefs.targets 分配一个或多个列的列定义. columnDefs 设置列定义初始化属性. colum ...

  8. datatables中的Options总结(1)

    datatables中的Options总结(1) 最近一直研究dataTables插件,下面是总结的所有的选项内容,用了帮助学习datatables插件. 这些选项的配置在$().Datatable( ...

  9. jQuery EasyUI Combobox 无法获取属性 options 的值: 对象为 null 或未定义

    错误的写法: $('#combobox1').combobox({ valueField: 'id', textField: 'text',data:[{id:1,text:'蚂蚁小羊'}]}); 正 ...

  10. myeclipse中导入js报如下错误Syntax error on token "Invalid Regular Expression Options", no accurate correc

    今天在使用bootstrap的时候引入的js文件出现错误Syntax error on token "Invalid Regular Expression Options", no ...

随机推荐

  1. 如何使用firefox适用于javascript的debugger命令

    首先安装firebug,在firefox的扩展里搜索安装即可. 然后在页面中启用firebug中的脚本: 然后在网页某些位置加入debugger命令,比如如下页面代码: <!DOCTYPE ht ...

  2. 如何让DIV中的文字垂直居中

    var h = $("div").innerHeight(); $("#text").css("font-size", h); $(&quo ...

  3. 面试题-一个for循环输出一个棱形

    用一个for循环输出以下棱形 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

  4. Oracle数据库date类型与Java中Date的联系与转化

    以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前 ...

  5. Nodejs经验谈

    前言 这里主要说一下之前使用Nodejs开发踩过的坑,只说坑不填坑,那就是赤裸地耍流氓,文中有大量的说明及填坑方法,了解的看官可以直接跳过. PS:说实话,Nodejs的坑确实蛮多的:但是上手简单,扩 ...

  6. dijkstra算法:寻找到全图各点的最短路径

    dijkstra算法介绍:即迪杰斯特拉算法,是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,是一种广度优先 ...

  7. 食物链-HZUN寒假集训

    食物链 总时间限制: 1000ms 内存限制: 65536kB 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动 ...

  8. Android Studio 插件开发详解四:填坑

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 在前面我介绍了插件开发的基本流程 [And ...

  9. hadoop 2.x 简单实现wordCount

    简单实现hadoop程序,包括:hadoop2.x的实现写法 import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs ...

  10. Page_Load不要忘了if (!IsPostBack)

    Page_Load不要忘了if (!IsPostBack) 问题:在DropDownList的SelectedIndexChanged事件中绑定数据,运行时,DropDownList控件的Select ...