前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给Apache RocketMQ提了个bug

给Apache RocketMQ提了个bug

作者头像
名字是乱打的
发布2021-12-24 09:14:52
2800
发布2021-12-24 09:14:52
举报
文章被收录于专栏:软件工程

超级开心给Apache RocketMQ提了个PR,采纳了

1.起因和疑问goutou

因公司需要,在rocketmq的官方文档上学下rocketmq,我在看官方提供的异步发送demo的时候有了个小疑问,demo如下

rocketmq异步发送demo

关于CountDownLauch的原理可以看看我之前的文章CountDownLauch解析,其实就是一个带阻塞功能的计数器。这里Apache RocketMQ又提供了一个coutdownlatch2,我看了代码,大致是为了设置一个等待时间又封装了下。

那么看到这里的demo,就有浓浓的疑问了,这里结合coutdownlatch和for循环,我猜测他的意思是基于这样一个场景的需要

我们想发100个消息,然后不管成功或者失败一定要发到mq上,但是由于这里是异步消息。因此我们直接for循环执行的话,仅仅是组装消息,遍历结束,但是消息打不打的到mq上还是未知的,后面又有个shutdownI()方法,如果不阻塞的话,很可能我们for里消息还没执行完呢,咱们实例直接没了。因此我觉得这里引用countdownlatch来阻塞主线程,直到全部消息打到mq后(不管成功或者失败,只要到发了就行),我们要立即释放主线程。

那么我觉得的那场景需要,但是这里代码不满足这个需要啊,两者一碰撞我的问题就来了:

1.这里弄了计数器却没有减操作是什么个意思?

2.这里用计数器阻塞了主线程5秒但是跟消息发没发完没直接联系啊,我搞10W消息,难道你就估他大概一分钟执行完设置60秒?如果只想起睡眠作用那为啥不用 TimeUnit.SECONDS.sleep(5);代替呢?

解决问题

先实践下果然达不到预期,我就先去提了个issues

本身作为工作还不到一年的毕业生对提pr这事有点不好意思,感觉人家大佬写的代码让我小兵子质疑不太好。就把这事忘了好几天,今天竟然又收到了Apahe让提pr的邮件我才想起来,然后down了代码提了一个pr给Apache。

他们效率极高,提了pr当晚就给修复了,很**感谢Apache RocketMQ团队的大佬们,让我感觉技术圈真的很open!**

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/7/1 上午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.起因和疑问goutou
    • 那么我觉得的那场景需要,但是这里代码不满足这个需要啊,两者一碰撞我的问题就来了:
      • 解决问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档