Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言

最近本地启动以前docker安装的rocketmq发现报错了,因为是从老mac迁移过来的,发现支持的芯片还是amd的,于是重新在docker下安装rocketmq,并记录下步骤,方便大家后续参考。

1. 步骤

1、先下载项目源码

git clone https://github.com/apache/rocketmq-docker.git

2、在官方项目rocketmq-docker中已经说明了docker安装rocketmq的步骤,因此我们只需要根据官方的提示执行即可
在这里插入图片描述

2、生成镜像

# 进入刚才下载的源码文件夹,然后进入image-build路径
cd image-build
# 这里RMQ-VERSION换成你想要安装的版本,比如我这里是4.8.0
sh build-image.sh 4.8.0 BASE-IMAGE

3、因为是arm芯片,执行这一步会报如下错误:
ERROR: failed to solve: eclipse-temurin:8-jdk-alpine: no match for platform in manifest

在这里插入图片描述

其原因就是因为这里编译时官方指定的jdk版本是x86的,也就是amd芯片的,很明显和arm芯片不符合,在github中也有该问题的详细解释和解决之法:https://github.com/apache/rocketmq-docker/issues/89

在这里插入图片描述
具体的原因大家有兴趣可以详细查看,这里我们直接讲解决的办法,就是在编译的时候,执行系统为centos,让其选择安装为适配了arm的jdk,指令如下:

sh build-image.sh 4.8.0 centos

这里耐心等待下载完成
在这里插入图片描述

4、下载完成后,执行docker image可以查看镜像,如下最新的一个就是我们刚刚编译的镜像,我这里底下的就是之前amd架构的镜像,已经不能适用
在这里插入图片描述
5、接下来我们继续编译rocketmq管理后台的镜像,当然如果你不需要可以跳过这步,早期版本管理后台是在rocketmq项目中的rocketmq-console模块,现在已经单独提取出来,叫rocketmq-dashboard项目。项目地址:https://github.com/apache/rocketmq-dashboard

该项目简介中也告诉我们docker的安装方法了,但官方编译的镜像也是基于amd版的jdk的,需要我们单独编译

在这里插入图片描述
6、下载源码到本地

git clone https://github.com/apache/rocketmq-dashboard.git

7、修改项目src/main/docker下的Dockerfile文件,将其中的java调整为支持arm芯片的版本openjdk:8

#FROM java:8
FROM openjdk:8
VOLUME /tmp
ADD rocketmq-dashboard-*.jar rocketmq-dashboard.jar
RUN sh -c 'touch /rocketmq-dashboard.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /rocketmq-dashboard.jar" ]

8、因为项目是maven项目,我们通过maven指令打包项目,并通过docker build将其打包镜像

mvn clean package -Dmaven.test.skip=true docker:build

在这里插入图片描述

11、查看镜像

docker images

在这里插入图片描述

12、本地创建broker.conf配置文件,我们映射到容器中,方便后续调整,这里如果你需要配置其他的配置项,也可以添加

brokerClusterName = DefaultCluster
brokerName = broker
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 你的本机ip, 注意不要写localhost,127.0.0.1等,因为这是放到docker容器中的,我们需要指向mac本机
brokerIP1 = 192.168.244.1

13、创建docker-compose.yml配置文件,用于生成容器

version: '3'
services:namesrv:image: apache/rocketmq:4.8.0container_name: rocketmq-namesrvports:- 9876:9876command: sh mqnamesrvbroker:image: apache/rocketmq:4.8.0container_name: rocketmq-brokerports:- 10909:10909- 10911:10911- 10912:10912volumes:# 这里的broker.conf路径就是上一步你本机创建的文件路径- /Library/software/dockerdata/rocketmq_arm/broker.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.confcommand: sh mqbroker -n namesrv:9876 -c /home/rocketmq/rocketmq-4.8.0/conf/broker.confdepends_on:- namesrvmqdashboard:image: apacherocketmq/rocketmq-dashboard:latestcontainer_name: rocketmq-dashboardports:- 8180:8080environment:JAVA_OPTS: -Drocketmq.config.namesrvAddrs=namesrv:9876 -Drocketmq.config.isVIPChannel=falsedepends_on:- namesrv

13、执行docker-compose生成容器

docker-compose -f docker-compose.yml up -d

在这里插入图片描述

14、docker中可以看到3个容器启动成功
在这里插入图片描述

15、访问:localhost:8180, 这里端口和你上述docker-compose中配置的映射端口保持一致
在这里插入图片描述
安装完成

2. 测试

最后发送几条消息进行测试一下

import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;import java.nio.charset.StandardCharsets;/*** @author benjamin_5* @Description* @date 2024/2/25*/
public class ProducerDemo {public static void main(String[] args) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {DefaultMQProducer producer = new DefaultMQProducer("group_test");producer.setNamesrvAddr("localhost:9876");producer.setVipChannelEnabled(false);// 启动实例producer.start();for (int i = 0; i < 10; i++) {Message msg = new Message("topic_test", "tag_test", ("hello "+ i).getBytes(StandardCharsets.UTF_8));SendResult send = producer.send(msg, 10000);System.out.println(send);}producer.shutdown();}
}

如果出现连接超时的问题invokSync call timeout,先检查下broker.conf中配置的ip是否是本机ip

确认无误后mac执行如下指令,重新设置一下本机本地hostname

scutil --set HostName $(scutil --get LocalHostName)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274187.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一个vue编辑的移动端页面

<template><div class"wrap"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" label-width"120px"><el-form-item label"班级" prop"classId"…

运维自动化之ansible

pxe 一键安装操作系统 操作系统只是提供一个平台 lnmp 需要多软件协同完成的一个简单项目 服务器正常运行 日常运维 巡检 服务器上的软件正常运行 zabbix 普罗米修斯 系统调优&#xff0c;架构调优 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代…

【SQL】601. 体育馆的人流量(with as 临时表;id减去row_number()思路)

前述 知识点学习&#xff1a; with as 和临时表的使用12、关于临时表和with as子查询部分 题目描述 leetcode题目&#xff1a;601. 体育馆的人流量 思路 关键&#xff1a;如何确定id是连续的三行或更多行记录 方法一&#xff1a; 多次连表&#xff0c;筛选查询方法二&…

护眼灯什么价位的好用?推荐五款好价护眼台灯

如今&#xff0c;我们不难发现许多年轻人早早地就戴上了眼镜&#xff0c;近视问题日益严重。在改善近视问题的众多因素中&#xff0c;营造适宜的照明环境&#xff0c;特别是选择一款合适的护眼台灯&#xff0c;显得尤为重要。然而&#xff0c;对于初次选购护眼台灯的人来说&…

vue+Nodejs+Koa搭建前后端系统(九)-- 上传图片

web2.0的到来使网页世界正式进入了寒武纪&#xff0c;各式各样的多媒体资源屡见不鲜&#xff0c;上传资源变得刻不容缓&#xff01; 前言 本文是在该系列的基础上&#xff0c;针对前后端代码的修改。 准备 HTTP上传图片时Content-Type值常见的有2种&#xff1a;application…

解决:chrome无痕模式下找不到插件问题

如需在 Chrome 浏览器或 ChromeOS 设备上以无痕模式使用扩展程序&#xff0c;请执行以下操作&#xff1a; 在新的无痕式窗口中&#xff0c;打开 chrome://extensions。找到要在无痕模式下使用的扩展程序。点击详情。开启在无痕模式下启用。 此时打开无痕模式&#xff0c;就能看…

经营分析怎么做?详解企业月度经营分析的思路与方法

企业经营分析是企业成功的关键之一&#xff0c;无论企业规模大小&#xff0c;都需要通过系统性的数据分析来指导经营决策。这一过程不仅仅是对集团大局数据的简单处理&#xff0c;还包括对市场、客户、生产、财务、运营、项目进展、人效等多个方面数据的全面审视。通过深入分析…

【微信小程序】传参存储

目录 一、本地数据存储 wx.setStorage wx.setStorageSync 1.1、异步缓存 存取数据 1.2、同步缓存 存取数据 二、使用url跳转路径携带参数 2.1、 wx.redirectTo({}) 2.2、 wx.navigateTo({}) 2.3、 wx.switchTab({}) 2.4 、wx.reLaunch({}) 2.5、组件跳转 三、…

解压常见_gzip:stdin:not in gzio format:怀疑下文件是否损坏

此次的主角文件是&#xff1a;pin-2.14-71313-gcc.4.4.7-linux.tar.gz 结论&#xff1a;文件后缀没问题&#xff0c;就先怀疑下是不是文件损坏了 ls指令看不出任何端倪 文件名、后缀都正常 解压出现报错 瞅瞅文件大小 du -h <文件名> 呦呵 4kb&#xff0c;和应该的大…

Android studio Gradle下载失败,如何手动配置解决该问题详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 今天在打开公司一个项目时&#xff0c;突然要重新下载相关的gradle&am…

在表格中循环插入表单

<template><div class"key">{{ruleForm.casesRange}}<el-form label-position"top" :model"ruleForm" refruleForm><el-form-item label"这个表格怎么写"><el-table :data"tableData" border>…

【rk3229 android7.1.2 替换默认输入法】

问题平台描述 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip CPU:rk3229 OS:Android 7.1.2 Kernel: 3.10 问题描述 国内客户&#xff0c;觉得安卓自带的输入法不好用&#x…

Ping工作原理

文章目录 目的ping网络协议 OSIICMP什么是ICMP作用功能报文类型查询报文类型差错报文类型ICMP 在 IPv4 和 IPv6 的封装ICMP 在 IPv4 协议中的封装ICMP 在 IPv6 协议中的封装ICMP 头部日常ping 排除步骤ping 查询报文使用code扩展目的 本文主要是梳理ping的工作原理- 揭开 ICMP…

项目实战-tpshop商城项目

项目实战-tpshop商城项目 环境部署准备软件工具准备远程连接测试远程连接测试-查看虚拟机IP地址远程连接测试-检测本机与虚拟机是否连通远程连接测试-通过远程工具连接linux服务器 常见问题处理 环境部署项目技术架构介绍部署tpshop项目-tpshop验证数据库验证用户信息表熟悉商品…

【C语言】内存函数

1. memcpy 使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任…

Java面试——Netty

优质博文&#xff1a;IT-BLOG-CN 一、BIO、NIO 和 AIO 【1】阻塞 IO(Blocking I/O)&#xff1a; 同步阻塞I/O模式&#xff0c;当一条线程执行 read() 或者 write() 方法时&#xff0c;这条线程会一直阻塞直到读取一些数据或者写出去的数据已经全部写出&#xff0c;在这期间这条…

数据库-第十一章 并发控制【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 数据库系统概论系列文章传送门&#xff1a; 第一章 绪论 第二/…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”&#xff0c;意味着您没有足够的权限来执行某个操作。在计算机领域&#xff0c;尤其是在文件系统和程序安装中&#xff0c;这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法&#xff1a; 文件系统权限&#xff1a;当您尝试…

C++的学习

代码练习 输入一个字符串&#xff0c;统计其中大写字母、小写字母、数字、空格以及其他字符的个数 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串" << endl;string str;getline(cin,str);int capital 0;int l…

快速搭建Vue前端框架

快速搭建Vue前端框架 安装Vue Vue官方安装过程:https://cli.vuejs.org/zh/guide/installation.html 二.创建Vue工程 2.2 安装淘宝镜像 安装淘宝镜像&#xff08;会让你安装Vue的速度加快&#xff09;&#xff1a; npm config set registry https://registry.npm.taobao.or…