github.com/nsqio/nsq@v1.3.0/nsqd/options.go (about) 1 package nsqd 2 3 import ( 4 "crypto/md5" 5 "crypto/tls" 6 "hash/crc32" 7 "io" 8 "log" 9 "os" 10 "time" 11 12 "github.com/nsqio/nsq/internal/lg" 13 ) 14 15 type Options struct { 16 // basic options 17 ID int64 `flag:"node-id" cfg:"id"` 18 LogLevel lg.LogLevel `flag:"log-level"` 19 LogPrefix string `flag:"log-prefix"` 20 Logger Logger 21 22 TCPAddress string `flag:"tcp-address"` 23 HTTPAddress string `flag:"http-address"` 24 HTTPSAddress string `flag:"https-address"` 25 BroadcastAddress string `flag:"broadcast-address"` 26 BroadcastTCPPort int `flag:"broadcast-tcp-port"` 27 BroadcastHTTPPort int `flag:"broadcast-http-port"` 28 NSQLookupdTCPAddresses []string `flag:"lookupd-tcp-address" cfg:"nsqlookupd_tcp_addresses"` 29 AuthHTTPAddresses []string `flag:"auth-http-address" cfg:"auth_http_addresses"` 30 HTTPClientConnectTimeout time.Duration `flag:"http-client-connect-timeout" cfg:"http_client_connect_timeout"` 31 HTTPClientRequestTimeout time.Duration `flag:"http-client-request-timeout" cfg:"http_client_request_timeout"` 32 33 // diskqueue options 34 DataPath string `flag:"data-path"` 35 MemQueueSize int64 `flag:"mem-queue-size"` 36 MaxBytesPerFile int64 `flag:"max-bytes-per-file"` 37 SyncEvery int64 `flag:"sync-every"` 38 SyncTimeout time.Duration `flag:"sync-timeout"` 39 40 QueueScanInterval time.Duration 41 QueueScanRefreshInterval time.Duration 42 QueueScanSelectionCount int `flag:"queue-scan-selection-count"` 43 QueueScanWorkerPoolMax int `flag:"queue-scan-worker-pool-max"` 44 QueueScanDirtyPercent float64 45 46 // msg and command options 47 MsgTimeout time.Duration `flag:"msg-timeout"` 48 MaxMsgTimeout time.Duration `flag:"max-msg-timeout"` 49 MaxMsgSize int64 `flag:"max-msg-size"` 50 MaxBodySize int64 `flag:"max-body-size"` 51 MaxReqTimeout time.Duration `flag:"max-req-timeout"` 52 ClientTimeout time.Duration 53 54 // client overridable configuration options 55 MaxHeartbeatInterval time.Duration `flag:"max-heartbeat-interval"` 56 MaxRdyCount int64 `flag:"max-rdy-count"` 57 MaxOutputBufferSize int64 `flag:"max-output-buffer-size"` 58 MaxOutputBufferTimeout time.Duration `flag:"max-output-buffer-timeout"` 59 MinOutputBufferTimeout time.Duration `flag:"min-output-buffer-timeout"` 60 OutputBufferTimeout time.Duration `flag:"output-buffer-timeout"` 61 MaxChannelConsumers int `flag:"max-channel-consumers"` 62 63 // statsd integration 64 StatsdAddress string `flag:"statsd-address"` 65 StatsdPrefix string `flag:"statsd-prefix"` 66 StatsdInterval time.Duration `flag:"statsd-interval"` 67 StatsdMemStats bool `flag:"statsd-mem-stats"` 68 StatsdUDPPacketSize int `flag:"statsd-udp-packet-size"` 69 StatsdExcludeEphemeral bool `flag:"statsd-exclude-ephemeral"` 70 71 // e2e message latency 72 E2EProcessingLatencyWindowTime time.Duration `flag:"e2e-processing-latency-window-time"` 73 E2EProcessingLatencyPercentiles []float64 `flag:"e2e-processing-latency-percentile" cfg:"e2e_processing_latency_percentiles"` 74 75 // TLS config 76 TLSCert string `flag:"tls-cert"` 77 TLSKey string `flag:"tls-key"` 78 TLSClientAuthPolicy string `flag:"tls-client-auth-policy"` 79 TLSRootCAFile string `flag:"tls-root-ca-file"` 80 TLSRequired int `flag:"tls-required"` 81 TLSMinVersion uint16 `flag:"tls-min-version"` 82 83 // compression 84 DeflateEnabled bool `flag:"deflate"` 85 MaxDeflateLevel int `flag:"max-deflate-level"` 86 SnappyEnabled bool `flag:"snappy"` 87 } 88 89 func NewOptions() *Options { 90 hostname, err := os.Hostname() 91 if err != nil { 92 log.Fatal(err) 93 } 94 95 h := md5.New() 96 io.WriteString(h, hostname) 97 defaultID := int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024) 98 99 return &Options{ 100 ID: defaultID, 101 LogPrefix: "[nsqd] ", 102 LogLevel: lg.INFO, 103 104 TCPAddress: "0.0.0.0:4150", 105 HTTPAddress: "0.0.0.0:4151", 106 HTTPSAddress: "0.0.0.0:4152", 107 BroadcastAddress: hostname, 108 BroadcastTCPPort: 0, 109 BroadcastHTTPPort: 0, 110 111 NSQLookupdTCPAddresses: make([]string, 0), 112 AuthHTTPAddresses: make([]string, 0), 113 114 HTTPClientConnectTimeout: 2 * time.Second, 115 HTTPClientRequestTimeout: 5 * time.Second, 116 117 MemQueueSize: 10000, 118 MaxBytesPerFile: 100 * 1024 * 1024, 119 SyncEvery: 2500, 120 SyncTimeout: 2 * time.Second, 121 122 QueueScanInterval: 100 * time.Millisecond, 123 QueueScanRefreshInterval: 5 * time.Second, 124 QueueScanSelectionCount: 20, 125 QueueScanWorkerPoolMax: 4, 126 QueueScanDirtyPercent: 0.25, 127 128 MsgTimeout: 60 * time.Second, 129 MaxMsgTimeout: 15 * time.Minute, 130 MaxMsgSize: 1024 * 1024, 131 MaxBodySize: 5 * 1024 * 1024, 132 MaxReqTimeout: 1 * time.Hour, 133 ClientTimeout: 60 * time.Second, 134 135 MaxHeartbeatInterval: 60 * time.Second, 136 MaxRdyCount: 2500, 137 MaxOutputBufferSize: 64 * 1024, 138 MaxOutputBufferTimeout: 30 * time.Second, 139 MinOutputBufferTimeout: 25 * time.Millisecond, 140 OutputBufferTimeout: 250 * time.Millisecond, 141 MaxChannelConsumers: 0, 142 143 StatsdPrefix: "nsq.%s", 144 StatsdInterval: 60 * time.Second, 145 StatsdMemStats: true, 146 StatsdUDPPacketSize: 508, 147 148 E2EProcessingLatencyWindowTime: time.Duration(10 * time.Minute), 149 150 DeflateEnabled: true, 151 MaxDeflateLevel: 6, 152 SnappyEnabled: true, 153 154 TLSMinVersion: tls.VersionTLS10, 155 } 156 }