一个关于 RocketMQ5 的帖子

191 天前
 HuKing

因为最近在做一个电商项目,需要用到消息队列对订单进行处理,所以就选用了 RocketMQ (主要还是 java 跨平台,但是后面就全是坑了),RabbitMQ 的 Erlang 有点整不来。

版本选用:截至目前最新的版本-5.1.4 。

因为之前没用过 MQ 这个东西,所以我要从头搭建,从下载编译好的源码到正确的能够在 dashboard 上看到消费者,花了整整两天,期间也看了很多博客和教程,但大部分都不是很好,而且相当难受,各有各的说法,光依赖版本就有三种rocketmq-clientrocketmq-client-javarocketmq-spring-boot-starter,依次增强(?),目前使用官方推荐的 SDK rocketmq-client-java

因为没学过,就开始跟着官方文档的 Quick Start (文档写的是真折磨人),从下载、运行 producer 都很顺利,但是到了他最新的 Broker+Proxy 的 Local 模式启动,就开始折磨人了。

坑 1:需要配置ROCKETMQ_HOME环境变量,不然无法启动

坑 2:启动失败,看日志说 Java 的 JVM 内存不够,直接改runserver.sh,runbroker.sh这两个文件的 JVM 启动内存,另外,runbroker.sh有个日志文件的大小,默认是 15g (这个是真的无语),直接改成 500m ,不然也有可能启动失败;还有,文档里面写推荐使用最新版本的 JDK ,可是又不支持 JDK21(5.1.4 版本 10 月份发布的),真的无语了。

坑 3:因为 Local 模式启动占用的是 8080 端口和 8081 端口,但是之前的 dashboard 也是占用的 8080 这个端口,所以得重新编译 dashboard 重新部署,官方文档也没说怎么改 proxy 启动端口(可能是我没找到?),后面知道在rmq-proxy.json里面添加配置"grpcServerPort":端口号,不得不说,这个配置是真的难找,耗时半天。

坑 4:java 版本的位数和系统版本的位数不一样,因为之前搞这台服务器的人安装了 32 位的 java ,并不是 64 位的,导致 Local 模式一直启动失败,一开始真的是百思不得其解,我的操作是跟这个官方的 Quick Start 是一步一步对应上的,真的不知道哪出了问题,日志里面也是含糊其辞,最后没办法了把系统所有 java 相关的东西重新整了一遍,才发现之前的 java 和系统位数没对上,真的是超级大坑,耗时 1 天

坑 5:grpc 的坑,因为服务器不能直接用外网进行访问,需要通过另一个域名服务器使用 Nginx 进行转发才能访问,RocketMQ 的 proxy 需要使用 gRPC 访问,之前没整过 gRPC ,所以又是一通找,最后找到了 gRPC 需要支持 http2 的协议才行,接着就改 Nginx 的 http2 ,之前的 Nginx 没有 Http2 这个模块,所以还得重新下载,安装模块,这个时候又又发现进来的是 http2 ,但是转发出去的不是 gRPC ,又改 nginx 为grpc_pass grpc://192.168.0.129:8081,耗时半天。

坑 5:到了使用 SDK 测试消息收发 这块,从 Producer 就开始不对劲了,提交 Issue 也没个人回(可能这个时间节点不对,大佬都在云栖大会?),报错Caused by: java.util.concurrent.CancellationException: Task was cancelled.,这个真的不知道是啥,gRPC 都是正确的,日志里面也没东西输出,现在卡在这了,等有进展再往下写

2633 次点击
所在节点    程序员
47 条回复
ufan0
191 天前
中间件这块儿强烈建议购买厂商服务,开源部分用起来是没问题,但是非专业运维尽量不要自己部署生产环境。
xuanbg
191 天前
中间件容器化部署就简单多了
HuKing
191 天前
@ufan0 老板目前说让我们先试试开源版,实在不行再换
xgfan
191 天前
看下来,初步判断这些“坑”都是水平问题。
HuKing
191 天前
@xgfan 是的呀,都没整过这些
hancai
191 天前
docker run 一个先跑起来就行,部署居然花了 2 天
JinyAa
191 天前
直接阿里云 ONS 服务
lsk569937453
191 天前
用 docker 的话直接 docker-compose ,一行命令启动。
用 k8s 的话直接网上找个现成的 helm chart ,一行命令启动。

现代已经有了这么多现成的武器,而楼主为了做一顿饭还在钻木取火。。。。
potatowish
191 天前
用 docker 简单很多,自己从头安装用 kafka 、rabbitmq
liuhan907
190 天前
消息队列还是用老牌的 kafka 靠谱
HuKing
190 天前
@hancai
@lsk569937453
@potatowish 我是属于临时上阵的,之前服务器哥们儿请了长假,我又要急着用,只能整这个了
ChoateYao
190 天前
就算不用 Docker ,也应该使用 yum 、apt 之类的一键安装吧
ecric
190 天前
我还能说点什么呢
rrfeng
190 天前
@xgfan
你要是用过 RocketMQ 就会发现它的文档根本就是残废,想找个配置项参数得去翻代码。当然这几年改好了也有可能。
rrfeng
190 天前
相比来说 RabbitMQ 的文档就很完善。
150530
190 天前
订单未支付过期这种延时队列一般是怎么选型? redis 过期 key 和 rabbitMQ 的死信也不行,听说 RocketMQ 天然支持延时队列,但是看评论说 RocketMQ 文档不是很全,会不会有什么坑啊
HuKing
190 天前
@150530 我就是看了一些推荐所以才在 RabbitMQ 和 RocketMQ 中选了 Rocket 的,文档这几天看下来感觉确实有点不太行,官方的 Samples 里面都是云服务的,真的很头大!
HuKing
190 天前
@150530 而且我觉得开源版本为什么会有云服务的案例,真的匪夷所思
HuKing
190 天前
@rrfeng #14 这几年好像并没改好,有些配置我都是去翻 4 版本才找到的,5 有些都没有...
rrfeng
190 天前
@HuKing
量少用 RabbitMQ ,量大上 Pulsar ,Kafka 虽然老牌但是设计上有缺陷,对运维很不友好。

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

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

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

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

© 2021 V2EX