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.mzph.cn/news/738960.shtml

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

相关文章

基于eleiment-plus的表格select控件

控件不是我写的&#xff0c;来源于scui,但在使用中遇到了一些问题&#xff0c;希望能把过程记录下来&#xff0c;同时把这个问题修复掉。 在使用的时候对控件进行二级封装&#xff0c;比如我的一个商品组件&#xff0c;再很多地方可以用到&#xff0c;于是 <template>&l…

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&a…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

linux GitLab 私有仓库的搭建

下载地址 gitLab 安装包下载地址&#xff1a;https://about.gitlab.com/install/ 环境准备&#xff1a; 环境&#xff1a;CentOS7.6 安装包&#xff1a;gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm 硬件配置&#xff1a; 4G 安装步骤&#xff1a; 安装&#xff1a; [rootserver3 ~]…

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像&#xff0c;可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境&#xff0c;里面仅安装了 Apache 应用程序&#xff08;或 用户需要的其他软件&#xff09; 可以把它称为一个 Apache 镜像。镜像是创建 Do…

如何把一款App从无到有运营起来?都需要哪些资源?

引言 在这个数字化的时代&#xff0c;移动应用程序&#xff08;App&#xff09;如同现代社会的魔法手段&#xff0c;将我们与世界连接在一起。无论是寻找爱情的那一刻&#xff0c;还是享受美食的时光&#xff1b;无论是在城市喧嚣中找到宁静的那一刻&#xff0c;还是在孤寂时刻…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题⑤

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题⑤ 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

软件杯 图像检索算法

文章目录 1 前言2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 图像检索算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff…

c++之旅——第六弹

大家好啊&#xff0c;这里是c之旅第五弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一,静态成员&…

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

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

智能警用装备柜管理系统|智能化可视化管理

智能警用装备柜管理系统|智能化可视化管理 我司&#xff08;JIONCH集驰&#xff09;警用装备管理系统&#xff08;智装备DW-S304&#xff09;是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 智…

返回值不同算方法重载么?为什么?

1、典型回答 返回值不同不算方法重载 方法重载&#xff08;Overloading&#xff09;是指在同一个类中定义了多个同名方法&#xff0c;但它们的参数列表不同&#xff0c;方法重载要求方法&#xff1a; 名称相同参数类型、参数个数或参数顺序&#xff0c;至少有一个不同 方法…

分布式之LoadBalancer

一、LoadBalancer介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现&#xff0c;用来替代Ribbon&#xff08;已经停更&#xff09;&#xff0c; 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 Ran…

[MYSQL数据库]--约束

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、空属性…

C++的学习

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

HTTP/1.1 协议优化方案探讨

前言 HTTP/1.1 是目前广泛应用的网络协议之一&#xff0c;虽然已经存在多年&#xff0c;但我们仍然可以通过优化来提升其性能和效率。本文将从优化思路的角度出发&#xff0c;探讨如何在 HTTP/1.1 协议下实现优化&#xff0c;包括避免发送重复 HTTP 请求、减少 HTTP 请求次数、…

分享个好用的GPT网站

目录 一、背景 二、功能描述 1、写代码 2、联网查询 3、AI绘图 一、背景 我现在的开发工作都依靠ChatGPT&#xff0c;效率提升了好几倍。这样一来&#xff0c;我有更多时间来摸鱼&#xff0c;真是嘎嘎香~ ⭐⭐⭐点击直达 ⭐⭐⭐ 二、功能描述 1、写代码 import java.ut…

portainer管理远程docker和docker-swarm集群

使用前请先安装docker和docker-compose&#xff0c;同时完成docker-swarm集群初始化 一、portainer-ce部署 部署portainer-ce实时管理本机docker&#xff0c;使用docker-compose一键拉起 docker-compose.yml version: 3 services:portainer:container_name: portainer#imag…

制冷系统管道焊接气焊安全操作

气焊操作安全教育&#xff1a; 1、检查气焊用具完好牢固无损&#xff0c;不得贴粘有&#xff08;机油&#xff09;&#xff1b; 2、气瓶余压&#xff08;2KG&#xff09;停止使用&#xff1b;清除动火 10 米范围内易燃易爆物料&#xff1b; 3、库房内动火要 做好通风排气&…

海格里斯HEGERLS智能托盘四向车系统为物流仓储自动化升级提供新答案

随着实体企业面临需求多样化、订单履行实时化、商业模式加速迭代等挑战&#xff0c;客户对物流仓储解决方案的需求也逐渐趋向于柔性化、智能化。作为近十年来发展起来的新型智能仓储设备&#xff0c;四向车系统正是弥补了先前托盘搬运领域柔性解决方案的空白。随着小车本体设计…