教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang nsq消费者时间过长,防止与nsqd服务断开连接

golang nsq消费者时间过长,防止与nsqd服务断开连接

发布时间:2022-02-03   编辑:jiaochengji.com
教程集为您提供golang nsq消费者时间过长,防止与nsqd服务断开连接等资源,欢迎您收藏本站,我们将为您提供最新的golang nsq消费者时间过长,防止与nsqd服务断开连接资源
<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><blockquote>

在使用nsq消费时,发现如果HandleMessage方法执行时间超过2分钟,在此方法运行完后,就会 抛出 <code>IO error - EOF</code> 错误。测试发现,当超过2分钟时,nsqadmin 后台显示的节点未连接。在查看github Issues时,有人提出过,于是做了测试,发现一切正常。(在实际开发中,不建议把慢执行放在消费服务里,因为HandleMessage方法不执行完,是不会消费下一个队列消息的)

</blockquote> <pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token punctuation">(</span>m <span class="token operator">*</span>MyHandler<span class="token punctuation">)</span> <span class="token function">HandleMessage</span><span class="token punctuation">(</span>msg <span class="token operator">*</span>nsq<span class="token punctuation">.</span>Message<span class="token punctuation">)</span> <span class="token punctuation">(</span>err <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// msg.NSQDAddress的地址是[--broadcast-address所指的ip] --broadcast-address=nsqd</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%s recv from %v, msg:%v\n"</span><span class="token punctuation">,</span> m<span class="token punctuation">.</span>Title<span class="token punctuation">,</span> msg<span class="token punctuation">.</span>NSQDAddress<span class="token punctuation">,</span> <span class="token function">string</span><span class="token punctuation">(</span>msg<span class="token punctuation">.</span>Body<span class="token punctuation">)</span><span class="token punctuation">)</span> done <span class="token operator">:=</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 keyword">go</span> <span class="token keyword">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> t <span class="token operator">:=</span> time<span class="token punctuation">.</span><span class="token function">Tick</span><span class="token punctuation">(</span>time<span class="token punctuation">.</span>Second <span class="token operator">*</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token punctuation">{</span> <span class="token keyword">select</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token operator"><-</span>t<span class="token punctuation">:</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"touch."</span><span class="token punctuation">)</span> msg<span class="token punctuation">.</span><span class="token function">Touch</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">case</span> <span class="token operator"><-</span>done<span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 测试sleep500秒</span> time<span class="token punctuation">.</span><span class="token function">Sleep</span><span class="token punctuation">(</span>time<span class="token punctuation">.</span>Second <span class="token operator">*</span> <span class="token number">500</span><span class="token punctuation">)</span> done <span class="token operator"><-</span> <span class="token number">1</span> <span class="token comment">/*//msg.DisableAutoResponse() // 禁用自动提交 // err := 执行业务逻辑 if err != nil { //msg.Requeue(time.Second * 5) // 重新放入队列消费 } else { //msg.Finish() // 手动提交消费完成,移出队列 }*/</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“golang nsq消费者时间过长,防止与nsqd服务断开连接”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang nsq消费者时间过长,防止与nsqd服务断开连接
NSQ源码分析(一)——nsqd的初始化及启动流程
CentOS 7下安装nsq
搭建基于consul,registrator,nsq的GO体系Docker开发环境
go 类型 value 不支持索引_Go语言基础(十四)
ubuntu环境下homestead安装运行nsq
Golang号称高并发,但高并发时性能不高解决办法
CentOS 7 安装配置NSQ
nsqd解析:nsqd-channel
还在担心服务挂掉?Sentinel Go 让服务稳如磐石

[关闭]
~ ~