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. RHEL 6.9 udev 将lv绑定raw devices

    环境 RHEL6|RHEL7,LVM2,RAW device 用途 使用LVM的lv逻辑卷绑定裸设备 1. 编辑 /etc/udev/rules.d/60-raw.rules 添加如下: ACTION ...

  2. Salesforce的数据权限机制

    本文主要介绍了 Salesforce 对于系统中数据的访问控制是如何设计的,然后也了解了下 Alfresco 和 Oracle VPD 的数据权限机制.希望对一些业务系统的数据权限的访问控制设计能有所 ...

  3. 三、编辑 Update set

    文档目录 开始使用  初始化查询实例: LambdaToSql.SqlClient DB = new LambdaToSql.SqlClient(); 更新单个实体对象,必须有主键Guid var e ...

  4. 大数据小视角1:从行存储到RCFile

    前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识.为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视 ...

  5. Shell排序(改良的插入排序)

    Shell排序算法最初是由D.L Shell于1959年提出,假设要排序的元素有n个,则每个进行插入排序是并不是所偶的元素同时进行,而是去一段间隔. Shell首先将间隔设定为n/2,然后跳跃的进行插 ...

  6. Unknown entity: org.jbpm.services.task.audit.TaskEventImpl

    1. use this persistence.xml - simply copy it into src/main/resources/META-INF please note the name o ...

  7. 前端mv框架下(目前写的是vue),对组件抽象的思考

    前沿: 抽象是门大学问.前端mv框架中,以组件化的概念为主.经常会考虑抽象到组件级别,进行复用.合理的抽象,能提高效率,减少业务逻辑视图的耦合程度.不合理的抽象,则会增加代码的复杂程度. 遇到的问题 ...

  8. Day2_元组_字典_集合_字符编码_文件处理

    元组: 作用:存多个值,元组不可变,主要用来读 age=(11,22,33,44,55) print(age[2]) #取出元组内的值 print(age[1:4]) #取出元组内的某些值 print ...

  9. node.js代理设置

    1.设置代理 npm config set proxy=http://proxy.tencent.com:8080 设置代理服务器,比如:npm config set proxy=http://127 ...

  10. jquery文本框内容实时监控

    $("#A").bind("input propertychange", function () { $("#B").val($(this) ...