请教各位大佬消息队列怎么系统的学习啊

2022-12-21 17:54:52 +08:00
 lbllol365

毕业两年多 Java 后端,公司用的 RabbitMQ ,感觉用的很浅。自己目前在看《 RabbitMQ 实战指南》和《深入理解 Kafka 与 Pulsar 消息流平台的实践与剖析》,看着感觉有些浮于表面了,没有那种实际的场景,面试问起来有点虚。

请教各位大佬消息队列怎么系统的学习啊?感觉缺的应该是实际使用场景的最佳实践以及消息队列常见问题的解决方案。

4196 次点击
所在节点    程序员
19 条回复
aptupdate
2022-12-21 18:12:07 +08:00
系统的学习是指什么呢?读懂源码?
实际场景可以 docker 跑个服务发几条消息看看是怎么收发的,然后就是消息一致性、幂等这些东西。
lbllol365
2022-12-21 18:18:52 +08:00
@aptupdate 了解消息队列常见问题的解决方案,消息队列的使用场景的最佳实践。当然,最重要的是中大厂面试问到消息队列能不虚(狗头)
locoz
2022-12-21 18:26:29 +08:00
这东西看几个案例就理解得差不多了吧...
aptupdate
2022-12-21 18:34:23 +08:00
@lbllol365 我面试好像没细问过消息队列的。但是有个同事面试的项目涉及到大数据,问了很多 kafka 的问题。
lbllol365
2022-12-21 19:20:55 +08:00
@aptupdate 哦,这样的啊。确实没有考虑到项目这方面的问题。提醒我了,感谢
CEBBCAT
2022-12-21 19:27:13 +08:00
我认为这个问题体现了你对 MQ 的认知。不是想贬低什么,而是想提醒你也许可以关注一下系统设计这些话题。其实我们使用 MQ 是想解决业务实现的,对吗?
Puteulanus
2022-12-21 20:14:53 +08:00
lbllol365
2022-12-21 20:51:44 +08:00
@CEBBCAT 我懂你的意思。自己确实也在看系统设计这块的内容,但我从最近的试水面试(小厂)来看,把 MQ 加到系统设计里问我的很少,几乎没有,都是问一些很具体的东西,比如如何防止消息重复消费,幂等这些。感觉自己答的不是太好,虽然可能都是些老八股了。也可能是我面的公司体量不够,年后投些体量大些的公司再看看吧

@Puteulanus 哦!这个书我买了,还没看到。看来要高优先级了
Puteulanus
2022-12-21 21:01:57 +08:00
loken2020
2022-12-22 00:03:55 +08:00
建议直接看他的源码实现。
solitude2
2022-12-22 11:40:58 +08:00
个人觉得,就是实践+思考。
先遇到问题,循着问题去解决,最后再深入思考,提升自己
NizumaEiji
2022-12-22 11:44:01 +08:00
看面试八股
那玩意儿是最好的目录
witcherhope
2022-12-22 16:18:49 +08:00
最快上手就是网课找个实战教程,然后再是看官方文档,再来就是啃源码,一上来啃源码不太推荐
RedBeanIce
2022-12-22 16:30:37 +08:00
1 ,如果你想理解业务问题,这个挺难的。只能在网上翻一番。
或者主动提问,使用消息队列遇到了什么问题
2 ,如果你想面试不虚,看源码吧,

3 ,歪楼,消息队列是锦上添花,,
4 ,歪楼,我看了一下楼主以前的提问,问过 Java ,那我把楼主归为 Java 开发者
作为 Java 开发者,或许是一名业务开发人员,,那么 SSM+mysql (或者 pgsql 等)才是你的重中之重,忘知悉。
看完 SSM ,可以了解下 spring cloud ,,然后才是消息队列,redis ,等等。
NUT
2022-12-22 22:22:52 +08:00
建议你看下 RocketMQ 的早期的版本大概 18 左右的。
能学到非常的东西,比如 mmap zerocopy ( netty )还有一些包括 java 并发类。比如 CountdownLatch2 之类的。
对了还有 RPC 协议,这里面又有 oneway async sync 调用等具体实现。
当然还有核心的 NIO channel 读文件之类的, 也能明确的看到啥时系统刷盘的实现。

源码其实不用看的特别对,只要精通看几个典型的,就行,开始看的就和进入大观园一样。 啥 tmd 的都不懂,慢慢刷。刷上 tmd 的几个月肯定有效果。

说一句 RMQ 的代码基本没啥注释,我当时都是手动补的。可惜的是换电脑,代码找不到了。

如果你想对 netty 的极限应用的了解,可以看下 zuul2 的代码就是那个 http 网关, 一个是 paasport 的 debug 设计,一个是一个调用链不同 handle 的不同玩法,一会添加,一会删除的。 哈哈哈哈 简直不要太牛逼。

配置中心可以看下 disconf 挺经典的。 而且代码比较精炼,看懂这个基本上 spring 容器基本咋玩就知道了。ps 我抽了 disconf 核心,18 年改造成 starter ,然后陆续的给其他中间件适配,比如 redis 、mongodb 啥的 从 17 年用到现在,也没啥问题。 后面 18 年我们接入了 dev-ops ,上了 k8s 他妈的动态配置需求砍掉,直接滚动更新,比啥都香,就是点点鼠标的事情。

java 好轮子太多了。 深入死磕几个比啥都香。我觉深入看源码坑还是很深的,不好坚持,如果受不了那种苦,我还是劝退吧。去做点业务也不错。

不过咋说,还是建议能够对代码有一个非常深度的了解,这好比,你从一开始选择「简单指令集」难度必然大于「复杂指令集」。不过后期的灵活性,是很大的。

当然这个也与个人的个性有关系,如果你是那种「长期主义」愿意牺牲一点短期利益,去坚持做一点事情。我相信总有一刻能真正的体会「量变引起质变」。

一个 java 老菜狗。不喜勿喷。
lbllol365
2022-12-22 22:43:37 +08:00
@NUT 非常感谢前辈的建议,非常感谢,已经记笔记了。我这边也有在看源码,主要是 Redis ,从《 Redis 设计与实现》入的门,目前也能做些简单的 Redis 二次开发了。Netty 也有在看,今年年中开始的,学的闪电侠的那本书。
lbllol365
2022-12-23 17:13:05 +08:00
@NUT 前辈说的 rocketmq 的 18 版本是指哪个版本呢?我这边在 release 和 tag 都没有找到这个版本
NUT
2022-12-24 13:11:58 +08:00
@lbllol365 #17 找不到了,https://github.com/kuangye098/rocketmq 看看这个。 或者找下 3.x 版本的 RMQ
lbllol365
2022-12-25 10:24:36 +08:00
@NUT 好的,非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903981

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX