前言

网上和官网上有很多关于怎么使用单机、docker、docker-compose搭建环境的教程,但是我本地的虚拟机搭建的有一套基于rke2+rancher的环境。所以不太想使用docker部署而是想把服务直接部署到rancher中。但是期间踩了好几个坑,所以记录一下防止以后忘记,也希望能够帮助到有需要的同学。

本文就不在赘述rocketmq的作用和功能了,毕竟RocketMQ的官网有中文的且已经介绍的很详细了,有想了解的小伙伴可以先移步到官网:https://rocketmq.apache.org/zh/

使用helm部署的也可以移步到 https://artifacthub.io/packages/helm/rocketmq/rocketmq,我这个是基于docker镜像部署到rancher上面的,纯当我无聊吧,建议别学我

版本环境

我用的rocketmq的版本是5.3.0,rocketmq5.x和rocketmq4.x版本之间docker部署的配置还有有所不同的,如果你部署的是4.x的版本,这篇文章可能帮不上你。

镜像获取

由于24年6月份dockerhub停止中国镜像服务后,我们已经很难通过docker pull命令拉取到镜像了,所以这个时候我们第一步是先要获取镜像有以下几个方法

  1. 最简单的方法通过魔法拉取镜像,可能需要一定的钞能力。

  2. 看能否自己通过朋友或公司的私有镜像站拉取

  3. 通过一下几个镜像代理网站 https://docker.m.daocloud.iohttps://huecker.iohttps://dockerhub.timeweb.cloud,点击对应的网址可以跳转过去有对应使用文档,建议使用 Edge或者火狐浏览器打开(PS:如果你英语不好可以使用上面浏览器的翻译)

找到解决拉取镜像的地址后我们就可以开始服务创建了

创建NameServer和Broker+Proxy容器

  • 创建挂载卷

  • 创建ConfigMap

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#自己rancher的机器地址
brokerIP1 = 192.168.0.129

  • 先把上面的volume和ConfigMap配置到Pod的存储中

  • 创建容器我是一个部署创建两个容器

  • 下面是rmqnamesrv的配置

  • rmqbroker+rmproxy的配置

  • 成功判断

    • 等大dashbord部署成功看到集群中是否有服务即可判断我们的部署是否成功

    • NameServer服务打开日志看到 The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876 即可判定nameserver服务启动成功

    • rmqbroker+rmproxy 服务看到 rocketmq-proxy startup successfully 代表procket服务启动成功,broker服务启动是否成功则需要到容器内看/home/rocketmq/logs/rocketmqlogs/broker.log 日志是否有报错,

创建rocketmq-dashboard服务

镜像地址:apacherocketmq/rocketmq-dashboard:latest

然后我们就可以通过Dahsborad控制台看到我们创建的服务了

服务部署完成

注意事项

  1. apache/rocketmq:5.3.0 镜像是包含nameserverproxybroker 三个服务的可以通 sh xxx命令来启动不同的服务 ,我们这里是将proxy和broker启动到一个容器中了

  2. 单独部署proxy时前两次会有如下的错误,希望有大佬能够指点一二

2024-09-01T00:34:52.080872000+08:00 OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
2024-09-01T00:34:52.080872000+08:00 OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
2024-09-01T00:34:54.247159830+08:00 org.apache.rocketmq.proxy.common.ProxyException: create system broadcast topic DefaultHeartBeatSyncerTopic failed on cluster DefaultCluster
2024-09-01T00:34:54.247176330+08:00 	at org.apache.rocketmq.proxy.service.sysmessage.AbstractSystemMessageSyncer.createSysTopic(AbstractSystemMessageSyncer.java:177)
2024-09-01T00:34:54.247179310+08:00 	at org.apache.rocketmq.proxy.service.sysmessage.AbstractSystemMessageSyncer.start(AbstractSystemMessageSyncer.java:143)
	at org.apache.rocketmq.proxy.service.client.ClusterConsumerManager.start(ClusterConsumerManager.java:68)
2024-09-01T00:34:54.247183120+08:00 	at org.apache.rocketmq.common.utils.AbstractStartAndShutdown.start(AbstractStartAndShutdown.java:33)
2024-09-01T00:34:54.247184750+08:00 	at org.apache.rocketmq.common.utils.AbstractStartAndShutdown.start(AbstractStartAndShutdown.java:33)
2024-09-01T00:34:54.247186100+08:00 	at org.apache.rocketmq.common.utils.AbstractStartAndShutdown.start(AbstractStartAndShutdown.java:33)
	at org.apache.rocketmq.proxy.ProxyStartup.main(ProxyStartup.java:96)