教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 nsqd New函数

nsqd New函数

发布时间:2022-01-31   编辑:jiaochengji.com
教程集为您提供nsqd New函数等资源,欢迎您收藏本站,我们将为您提供最新的nsqd New函数资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">New</span><span class="token punctuation">(</span>opts <span class="token operator">*</span>Options<span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token operator">*</span>NSQD<span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> err <span class="token builtin">error</span> dataPath <span class="token operator">:=</span> opts<span class="token punctuation">.</span>DataPath <span class="token comment">//从datapath读路径</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>DataPath <span class="token operator">==</span> <span class="token string">""</span> <span class="token punctuation">{</span> cwd<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> os<span class="token punctuation">.</span><span class="token function">Getwd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment">//没有配置默认在当前目录</span> dataPath <span class="token operator">=</span> cwd <span class="token punctuation">}</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>Logger <span class="token operator">==</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> opts<span class="token punctuation">.</span>Logger <span class="token operator">=</span> log<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span>Stderr<span class="token punctuation">,</span> opts<span class="token punctuation">.</span>LogPrefix<span class="token punctuation">,</span> log<span class="token punctuation">.</span>Ldate<span class="token operator">|</span>log<span class="token punctuation">.</span>Ltime<span class="token operator">|</span>log<span class="token punctuation">.</span>Lmicroseconds<span class="token punctuation">)</span><span class="token comment">//默认log配置</span> <span class="token punctuation">}</span> n <span class="token operator">:=</span> <span class="token operator">&</span>NSQD<span class="token punctuation">{</span><span class="token comment">//初始化 map和chan</span> startTime<span class="token punctuation">:</span> time<span class="token punctuation">.</span><span class="token function">Now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> topicMap<span class="token punctuation">:</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token operator">*</span>Topic<span class="token punctuation">)</span><span class="token punctuation">,</span> clients<span class="token punctuation">:</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int64</span><span class="token punctuation">]</span>Client<span class="token punctuation">)</span><span class="token punctuation">,</span> exitChan<span class="token punctuation">:</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">chan</span> <span class="token builtin">int</span><span class="token punctuation">)</span><span class="token punctuation">,</span> notifyChan<span class="token punctuation">:</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">chan</span> <span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span> optsNotificationChan<span class="token punctuation">:</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">chan</span> <span class="token keyword">struct</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span> dl<span class="token punctuation">:</span> dirlock<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span>dataPath<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment">//初始化目录锁</span> <span class="token punctuation">}</span> <span class="token comment">//就是封装了http Client Client连接超时 Client请求超时,没有tlsConfig配置,毕竟只是http</span> httpcli <span class="token operator">:=</span> http_api<span class="token punctuation">.</span><span class="token function">NewClient</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPClientConnectTimeout<span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPClientRequestTimeout<span class="token punctuation">)</span> n<span class="token punctuation">.</span>ci <span class="token operator">=</span> clusterinfo<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span>n<span class="token punctuation">.</span>logf<span class="token punctuation">,</span> httpcli<span class="token punctuation">)</span><span class="token comment">//封装了log http client</span> n<span class="token punctuation">.</span>lookupPeers<span class="token punctuation">.</span><span class="token function">Store</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">*</span>lookupPeer<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token comment">//atomic.Value 存储类型</span> n<span class="token punctuation">.</span><span class="token function">swapOpts</span><span class="token punctuation">(</span>opts<span class="token punctuation">)</span><span class="token comment">//n.opts 也是atomic.Value,存储</span> n<span class="token punctuation">.</span>errValue<span class="token punctuation">.</span><span class="token function">Store</span><span class="token punctuation">(</span>errStore<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token comment">//errValue 同上</span> err <span class="token operator">=</span> n<span class="token punctuation">.</span>dl<span class="token punctuation">.</span><span class="token function">Lock</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"failed to lock data-path: %v"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>MaxDeflateLevel <span class="token operator"><</span> <span class="token number">1</span> <span class="token operator">||</span> opts<span class="token punctuation">.</span>MaxDeflateLevel <span class="token operator">></span> <span class="token number">9</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> errors<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span><span class="token string">"--max-deflate-level must be [1,9]"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>ID <span class="token operator"><</span> <span class="token number">0</span> <span class="token operator">||</span> opts<span class="token punctuation">.</span>ID <span class="token operator">>=</span> <span class="token number">1024</span> <span class="token punctuation">{</span><span class="token comment">//ID经过md5后对1024取余 后保证了id在[0,1024)</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> errors<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span><span class="token string">"--node-id must be [0,1024)"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>StatsdPrefix <span class="token operator">!=</span> <span class="token string">""</span> <span class="token punctuation">{</span><span class="token comment">//statsd的前缀</span> <span class="token keyword">var</span> port <span class="token builtin">string</span> <span class="token boolean">_</span><span class="token punctuation">,</span> port<span class="token punctuation">,</span> err <span class="token operator">=</span> net<span class="token punctuation">.</span><span class="token function">SplitHostPort</span><span class="token punctuation">(</span>opts<span class="token punctuation">.</span>HTTPAddress<span class="token punctuation">)</span><span class="token comment">//取出httpAddress中port</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"failed to parse HTTP address (%s) - %s"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPAddress<span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">//将broadcastaddress和port合成一个address,替换.成_ 生成statsdHostKey</span> statsdHostKey <span class="token operator">:=</span> statsd<span class="token punctuation">.</span><span class="token function">HostKey</span><span class="token punctuation">(</span>net<span class="token punctuation">.</span><span class="token function">JoinHostPort</span><span class="token punctuation">(</span>opts<span class="token punctuation">.</span>BroadcastAddress<span class="token punctuation">,</span> port<span class="token punctuation">)</span><span class="token punctuation">)</span> prefixWithHost <span class="token operator">:=</span> strings<span class="token punctuation">.</span><span class="token function">Replace</span><span class="token punctuation">(</span>opts<span class="token punctuation">.</span>StatsdPrefix<span class="token punctuation">,</span> <span class="token string">"%s"</span><span class="token punctuation">,</span> statsdHostKey<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token comment">//替换statsdPrefix中的%s 替换为statsdHostKey</span> <span class="token keyword">if</span> prefixWithHost<span class="token punctuation">[</span><span class="token function">len</span><span class="token punctuation">(</span>prefixWithHost<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">!=</span> <span class="token string">'.'</span> <span class="token punctuation">{</span> prefixWithHost <span class="token operator"> =</span> <span class="token string">"."</span> <span class="token punctuation">}</span> opts<span class="token punctuation">.</span>StatsdPrefix <span class="token operator">=</span> prefixWithHost <span class="token punctuation">}</span> <span class="token keyword">if</span> opts<span class="token punctuation">.</span>TLSClientAuthPolicy <span class="token operator">!=</span> <span class="token string">""</span> <span class="token operator">&&</span> opts<span class="token punctuation">.</span>TLSRequired <span class="token operator">==</span> TLSNotRequired <span class="token punctuation">{</span><span class="token comment">//判断tlsclient 权限证书。以及是否需要tls</span> opts<span class="token punctuation">.</span>TLSRequired <span class="token operator">=</span> TLSRequired <span class="token punctuation">}</span> tlsConfig<span class="token punctuation">,</span> err <span class="token operator">:=</span> <span class="token function">buildTLSConfig</span><span class="token punctuation">(</span>opts<span class="token punctuation">)</span><span class="token comment">//生成TLS配置。</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"failed to build TLS config - %s"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> tlsConfig <span class="token operator">==</span> <span class="token boolean">nil</span> <span class="token operator">&&</span> opts<span class="token punctuation">.</span>TLSRequired <span class="token operator">!=</span> TLSNotRequired <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> errors<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span><span class="token string">"cannot require TLS client connections without TLS key and cert"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> n<span class="token punctuation">.</span>tlsConfig <span class="token operator">=</span> tlsConfig <span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> opts<span class="token punctuation">.</span>E2EProcessingLatencyPercentiles <span class="token punctuation">{</span> <span class="token keyword">if</span> v <span class="token operator"><=</span> <span class="token number">0</span> <span class="token operator">||</span> v <span class="token operator">></span> <span class="token number">1</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"invalid E2E processing latency percentile: %v"</span><span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> n<span class="token punctuation">.</span><span class="token function">logf</span><span class="token punctuation">(</span>LOG_INFO<span class="token punctuation">,</span> version<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token string">"nsqd"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> n<span class="token punctuation">.</span><span class="token function">logf</span><span class="token punctuation">(</span>LOG_INFO<span class="token punctuation">,</span> <span class="token string">"ID: %d"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>ID<span class="token punctuation">)</span> n<span class="token punctuation">.</span>tcpServer <span class="token operator">=</span> <span class="token operator">&</span>tcpServer<span class="token punctuation">{</span><span class="token punctuation">}</span> n<span class="token punctuation">.</span>tcpListener<span class="token punctuation">,</span> err <span class="token operator">=</span> net<span class="token punctuation">.</span><span class="token function">Listen</span><span class="token punctuation">(</span><span class="token string">"tcp"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>TCPAddress<span class="token punctuation">)</span><span class="token comment">//监听TcpServer Listen</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"listen (%s) failed - %s"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>TCPAddress<span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> n<span class="token punctuation">.</span>httpListener<span class="token punctuation">,</span> err <span class="token operator">=</span> net<span class="token punctuation">.</span><span class="token function">Listen</span><span class="token punctuation">(</span><span class="token string">"tcp"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPAddress<span class="token punctuation">)</span><span class="token comment">//监听HTTPServer Listen</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"listen (%s) failed - %s"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPAddress<span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> n<span class="token punctuation">.</span>tlsConfig <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token operator">&&</span> opts<span class="token punctuation">.</span>HTTPSAddress <span class="token operator">!=</span> <span class="token string">""</span> <span class="token punctuation">{</span> n<span class="token punctuation">.</span>httpsListener<span class="token punctuation">,</span> err <span class="token operator">=</span> tls<span class="token punctuation">.</span><span class="token function">Listen</span><span class="token punctuation">(</span><span class="token string">"tcp"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPSAddress<span class="token punctuation">,</span> n<span class="token punctuation">.</span>tlsConfig<span class="token punctuation">)</span><span class="token comment">//监听HTTPSServer Listen</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"listen (%s) failed - %s"</span><span class="token punctuation">,</span> opts<span class="token punctuation">.</span>HTTPSAddress<span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> n<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“nsqd New函数”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
NSQ源码分析(一)——nsqd的初始化及启动流程
nsqd解析:nsqd-channel
nsqd New函数
ubuntu环境下homestead安装运行nsq
CentOS 7下安装nsq
CentOS 7 安装配置NSQ
go 类型 value 不支持索引_Go语言基础(十四)
搭建基于consul,registrator,nsq的GO体系Docker开发环境
select 联动菜单实现代码
mac安装nsq随手记

[关闭]
~ ~