10 张图 | 一文带你用 Mac M1 跑 RocketMQ

这是悟空的第 166 篇原创文章

架构进阶网站:www.passjava.cn

你好,我是悟空。

本文主要内容如下:

目录

前言

最近在倒腾RocketMQ消息队列,首先就得把 RocketMQ 跑起来对吧,我们一般都是 Windows 或者 Linux 机器上,按照官方教程一下子就跑起来了,另外用 Intel 芯片的 Mac 也能轻松跑起来。

但是我在 Mac M1 上的机器上跑的时候,就遇到了各种问题,折腾了一天,最后终于把 RocketMQ 在 Mac M1 上用Docker跑起来了,这里总结下心路历程。

虽然演示环境是用 Mac M1系统,但其实 Linux 系统也适用~

关于用源码方式跑 RocketMQ 的方式下文也有介绍。

一、用源码跑 RocketMQ

最开始我用 Docker 跑,会报错,后来我就用源码跑,可以跑起来,能够发送和消费消息。

源码地址:github.com/apache/rock...

我用的版本是 4.9.2。

详细步骤请查看悟空之前写的一篇文章:

18 张图 | 一文带你搭建 RocketMQ 源码调试环境

二、用 Docker 跑 RocketMQ

总共启动了三个容器,用到的镜像分别为

  • nameserver 镜像:rocketmqinc/rocketmq
  • broker 镜像:dyrnq/rocketmq:4.8.0
  • 控制台镜像:apacherocketmq/rocketmq-dashboard:latest

三个容器启动成功

2.1 拉取 rocketmq 镜像

bash 复制代码
docker pull rocketmqinc/rocketmq

2.2 启动 nameserver 命令

镜像:rocketmqinc/rocketmq

bash 复制代码
docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  rocketmqinc/rocketmq sh mqnamesrv

2.3 启动 broker 命令

镜像:dyrnq/rocketmq:4.8.0

bash 复制代码
docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbrokerv2 --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" dyrnq/rocketmq:4.8.0 sh mqbroker -c ../conf/broker.conf

进入容器

bash 复制代码
docker exec -it b6b /bin/bash

进入到 broker 容器

修改 broker.conf 文件,提示未安装 vim 工具,则需要安装下 vim

sql 复制代码
vim ../conf/broker.conf
apt-get update
apt-get install vim
vim ../conf/broker.conf

然后将 这行命令拷贝到 broker.conf 文件中。192.168.10.197 为自己的本机 IP

ini 复制代码
brokerIP1=192.168.10.197

不知道自己 IP 的地址的,可以通过这个命令获取 mac 机器的本机 IP,如下所示:

perl 复制代码
 ifconfig | grep "inet"

最后 broker.conf 配置如下:

broker.conf 配置

三、启动控制台 rocketmq-dashboard

原来的控制台是 rocketmq-console-ng,但是发现 Github 上已经移除了。官方提示如下:

官方提示移除了 rocketmq-console-ng

上面公告的表示之前的rocket-console已经不在这个仓库了,已经创建了一个独立的仓库并命名为RocketMQ Dashboard。仓库路径:github.com/apache/rock...

我们直接执行下面的命令:

arduino 复制代码
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.8.62:9876 -Drocketmq.config.isVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

启动 dashboard 容器

注意:这里的 IP 地址为本机 IP

isVIPChannel=false,这里必须这样设置,不然打开控制台后,无法获取数据。

容器启动成功后访问 http://localhost:8080/

四、测试发送消息

往 test_topic 发送一条消息

选择往哪个队列发送消息

在消息主题中输入 悟空聊架构,www.passjava.cn,点击确定按钮发送消息。

发送的消息内容

发送结果如下:

发送结果

看下 Message 菜单栏,选择 test_top 主题,可以看到一条消息:

消息列表

消息内容如下,和发送的消息一致。

接收到的消息

五、问题汇总

broker 无法连到 NameServer

需要到容器里面修改 broker.conf 文件,加上

brokerIP1=192.168.10.197

并且 docker 启动 broker 时需要增加命令参数-c ../conf/broker.conf

原因

这里的 ip 地址需要指定为外网地址。因为 rockerMQ broker 默认会选择内网地址。

只有当参数行中有-c参数时才会使用配置文件的参数。这里卡了很长时间。

源码如下:

ini 复制代码
if (commandLine.hasOption('c')) {
    String file = commandLine.getOptionValue('c');
    if (file != null) {
       configFile = file;
       InputStream in = new BufferedInputStream(new FileInputStream(file));
       properties = new Properties();
       properties.load(in);

       properties2SystemEnv(properties);
       MixAll.properties2Object(properties, brokerConfig);
       MixAll.properties2Object(properties, nettyServerConfig);
       MixAll.properties2Object(properties, nettyClientConfig);
       MixAll.properties2Object(properties, messageStoreConfig);

       BrokerPathConfigHelper.setBrokerConfigPath(file);
       in.close();
    }
}

启动 broker 报错

typescript 复制代码
 wukong@wukongs-MacBook-Pro  ~  docker restart b6b
Error response from daemon: Cannot restart container b6b: Cannot link to a non running container: /rmqnamesrv AS /rmqbrokerv2/namesrv

报错提示

原因

这个问题其实就是 name server 没启动成功。

  • END -
相关推荐
wn53131 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
希冀1231 小时前
【操作系统】1.2操作系统的发展与分类
后端
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people2 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政8 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
拾光师9 小时前
spring获取当前request
java·后端·spring
Java小白笔记11 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
JOJO___13 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server13 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php