黑松山资源网 Design By www.paidiu.com
前言
for循环是Go语言唯一的循环结构,最近在做一个基于RabbitMQ的应用,由于官方的qos没有golang的版本,所以出了一点问题。
问题代码如下:
_, ch, err := component.NewRabbitMQ() if err != nil { panic(err) } if err := ch.Qos(10, 0, true); err != nil { panic(err) } msgs, err := ch.Consume("push", "", false, false, false, false, nil) if err != nil { panic(err) } for m := range msgs { go func(d *amqp.Delivery) { defer func() { d.Ack(false) } // 处理消息 }(&m) }
发现消费到10条消息,进程就退出了,但是exit code为0,表示系统是正常退出,由于做了日志记录可以确定消费了10条,所以初步确定是qos相关问题。
排查过程
- 首先是把d的tag打印出来,发现全部是一样的,可以确定是重复的一条消息
- 一开始想到可能是经典的go协程执行在for循环结束以后导致的,但是看我的代码不属于这种情况,有使用&m保证每一条消息都是不同循环传入的。所以判断可能是for循环的传递问题。
- 确定方向之后开始写了一个测试项目用来验证我的想法是否正确。
测试代码
package main import "fmt" func main() { ch := make(chan int, 10) for i := 0; i < 10; i++ { ch <- i } close(ch) for v := range ch { fmt.Println(&v) } }
执行输出
0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008 0xc420086008
到这里才焕然大悟,for循环中,如果循环变量不是指针,那么每次的变量是同一个,不过值变了。,所以上例中的RabbitMQ go协程消费消息那里,需要直接传递值而不是指针,经过测试之后发现,问题确实解决了。
题外话
测试代码那里,如果不close掉channel是会发生死锁的,原因是 当for循环读完channel的10个值之后会继续尝试读取下一个,而由于channel为空又没关闭,会一直阻塞形成死锁
TOOD
研究RabbitMQ Consumer部分的源码来看看消费channel被关闭的问题。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年05月18日
2024年05月18日
- 群星《17号音乐仓库2 第10期》[FLAC/分轨][163.67MB]
- 宝丽金50周年《古典篇》3CD限定盘[低速原抓WAV+CUE][1.8G]
- 群星.1986-新格名曲精选-歌3【新格】【WAV+CUE】
- 【ABC唱片】徐刚《独步外滩SACD》ISO+WAV分轨
- 刘月宁《扬琴独奏-木兰辞变奏曲》[FLAC+CUE]
- 陈奕迅《48首选》[WAV分轨][1.8G]
- 林忆莲《陪着我走》 SACD DSD64[DSF][1.1G]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 刘欢范琳琳.1988-信天游迪斯科(TP版)【内蒙古音像】【WAV+CUE】
- 群星-真声音真音乐[WAV+CUE]
- 群星-《茶缘》(TeaPredestinedRelationship)[FLAC]
- RCA白头佬美国头版-斯托科夫斯基[狂想曲][WAV+CUE]
- 【ABC唱片】《春花秋月SACD-062》-WAV分轨
- [ABC唱片]-《俄罗斯三角琴》[K2-064][K2CD]WAV+CUE
- 群星《2007香港高级视听展原音精选SACD》[ISO][2.9G]