当前位置: 首页 > news >正文

Mac M1 Docker创建Rocketmq集群并接入Springboot项目

文章目录

    • 前言
    • Docker创建rocketmq集群
      • 创建rocketmq目录
      • 创建docker-compose.yml
      • 新增broker.conf文件
      • 启动容器
    • Springboot 接入 rocketmq
      • 配置maven依赖
      • 修改appplication.yml
      • 新增消息生产者
      • 新增消费者
      • 测试发送消息
    • 总结

前言

最近公司给配置了一台mac,正好有时间给装一个开发环境后面使用。刚好最近的项目需要用到rocketmq,这不就用docker安装了一个rocketmq本地环境进行测试使用。由于此时mac m1芯片,很多的镜像都不能用,就连apache下的镜像启动容器都报不兼容。所以,本人在网上找了很久发现这个镜像可以使用。为了保证安装集群的简便特意使用了docker-compos进行部署,请各位大大敬请鉴赏。

Docker创建rocketmq集群

创建rocketmq目录

在这里插入图片描述

如图所示我直接建立三个空文件夹conf、logs、store来保存mq数据。

创建docker-compose.yml

我们直接在mq目录下创建docker-compose.yml ,文件内容如下:

version: '3.5'
services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports:- 10909:10909- 10911:10911volumes:- ./logs:/opt/logs- ./store:/opt/store- ./conf/broker.conf:/etc/rocketmq/broker.confenvironment:NAMESRV_ADDR: "rmqnamesrv:9876"JAVA_OPTS: " -Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"command: mqbroker -c /etc/rocketmq/broker.confdepends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqbrokerrmqconsole:image: styletang/rocketmq-console-ngcontainer_name: rmqconsoleports:- 8090:8080 ## 可以自己修改端口号,我这里改成不常用的8090environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"depends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqconsolenetworks:rmq:name: rmqdriver: bridge

新增broker.conf文件

在conf文件夹下新增一个broker.conf,文件内容写入下面配置:

# 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# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a# 0 表示 Master,> 0 表示 Slave
brokerId=0# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=www.senfel.com# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true# Broker 对外服务的监听端口
listenPort=10911# 删除文件时间点,默认凌晨4点
deleteWhen=04# 文件保留时间,默认48小时
fileReservedTime=120# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

注意:如果我们在broker.conf中配置了域名,修改了本地的hosts映射,将IP映射到www.senfel.com,就可以直接使用域名访问了。

启动容器

直接在docker-compose.yml文件所在的位置输入命令docker-compose up即可启动
再查看我们的Docker Desktop就会发现RocketMQ已经配置好了
在这里插入图片描述

在浏览器中输入http://localhost:8090/即可看到管理页面
在这里插入图片描述

至此,docker安装rocketmq完成。

Springboot 接入 rocketmq

配置maven依赖

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version>
</dependency>

修改appplication.yml

rocketmq:# NameServername-server: 127.0.0.1:9876producer:# 发送消息超时时间,默认3000send-message-timeout: 30000

新增消息生产者

为了模拟我直接用请求触发

@Resource
private RocketMQTemplate rocketMQTemplate;/*** 模拟发送消息* @param msg* @author senfel* @date 2024/11/6 15:36 * @return org.apache.rocketmq.client.producer.SendResult*/
@GetMapping("/send")
public SendResult sendMessage(String msg) {Message<GigyaSyncIdMessage> msgs = MessageBuilder.withPayload(new GigyaSyncIdMessage(msg)).build();SendResult sendResult = rocketMQTemplate.syncSend(CommonConstant.GIGYA_TOPIC, msgs);return sendResult;
}

新增消费者

模拟一个 消费者

/*** gigya同步id消费者* @author senfel* @date 2024/11/06 15:39*/
@Component
@RocketMQMessageListener(consumerGroup = CommonConstant.ROCKETMQ_DEFAULT_CONSUMER_GROUP, topic = CommonConstant.GIGYA_TOPIC)
@Slf4j
public class GigyaSyncIdConsumer implements RocketMQListener<GigyaSyncIdMessage> {@ResourceVisitorGigyaMappingService visitorGigyaMappingService;@Overridepublic void onMessage(GigyaSyncIdMessage message) {try{log.info("Received GigyaSyncIdMessage : {}" , message);//业务代码}catch (Exception e){log.error("处理GigyaSyncIdMessage消息失败,消息体为:{},详情为:{}",JSONObject.toJSONString(message),e.getMessage());}}
}

测试发送消息

postman调用接口模拟发送消息

在这里插入图片描述

查看消费者是否消费消息
在这里插入图片描述

查看mq控制台

在这里插入图片描述

在这里插入图片描述

至此springboot接入rocketmq完成。

总结

Mac M1上用Docker部署Rocketmq集群还是比较简单,我们只需要安装好docker在选择好适合自己机器芯片的镜像,再编写好docker-compose即可。在Springboot集成Rocketmq方面,我们直接可以引入相关依赖写入mq配置信息,直接在 项目中编写消费者和生产者即可。总的来说,还是比较好上手的。

相关文章:

Mac M1 Docker创建Rocketmq集群并接入Springboot项目

文章目录 前言Docker创建rocketmq集群创建rocketmq目录创建docker-compose.yml新增broker.conf文件启动容器 Springboot 接入 rocketmq配置maven依赖修改appplication.yml新增消息生产者新增消费者测试发送消息 总结 前言 最近公司给配置了一台mac&#xff0c;正好有时间给装一…...

k8s 查看cpu使用率最高的pod

在 Kubernetes 中&#xff0c;可以使用 kubectl top 命令查看 Pod 的资源使用情况&#xff0c;从而找到 CPU 使用率最高的 Pod。 步骤 使用 kubectl top pods 查看所有 Pod 的 CPU 使用情况 运行以下命令查看集群中所有 Pod 的 CPU 和内存使用情况&#xff1a; kubectl top po…...

jenkins 构建报错 Cannot run program “sh”

原因 在 windows 操作系统 jenkins 自动化部署的时候, 由于自动化构建的命令是 shell 执行的,而默认windows 从 path 路径拿到的 shell 没有 sh.exe &#xff0c;因此报错。 解决方法 前提是已经安装过 git WINR 输入cmd 打开命令行, 然后输入where git 获取 git 的路径, …...

Netty ByteBuf 分配 | 池化复用 、直接内存

Netty ByteBuf 分配 本文主要内容关于 ByteBuf 分配介绍&#xff0c;为了更好的理解本文&#xff0c;我们可以带着几个问题思考 在IO密集型业务场景下&#xff0c;可能涉及大量ByteBuf分配&#xff0c;这时我们需 要考虑会不会产生OOM会不会出现频繁GC会不会内存泄露 根据上…...

【数据结构】堆和二叉树(2)

文章目录 前言一、建堆和堆排序1.堆排序 二、二叉树链式结构的实现1.二叉树的遍历 三、链式二叉树的功能函数1.二叉树结点个数2.二叉树叶子结点个数3.二叉树的高度4.二叉树第k层结点个数5. 二叉树查找值为x的结点6.二叉树销毁 总结 前言 接着上一篇博客&#xff0c;我们继续分…...

Oracle分区技术特性

Oracle 的分区是一种“分而治之”的技术&#xff0c;通过将大表、索引分成可以独立管理的、小的 Segment&#xff0c;从而避免了对每个对象作为一个大的、单独的 Segment 进行管理&#xff0c;为海量数据访问提供了可伸缩的性能。自从 Oracle 引入分区技术以来&#xff0c;Orac…...

Hive操作库、操作表及数据仓库的简单介绍

数据仓库和数据库 数据库和数仓区别 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别 操作型处理(数据库)&#xff0c;叫联机事务处理OLTP&#xff08;On-Line Transaction Processing&#xff09;&#xff0c;也可以称面向用户交易的处理系统&#xff0c;它是针对具体业务…...

智能网联汽车:人工智能与汽车行业的深度融合

内容概要 在这个快速发展的时代&#xff0c;智能网联汽车已经不再是科幻电影的专利&#xff0c;它正在悄然走进我们的日常生活。如今&#xff0c;人工智能&#xff08;AI&#xff09;技术与汽车行业的结合犹如一场科技盛宴&#xff0c;让我们看到了未来出行的新方向。通过自动…...

VUE 循环的使用方法集锦

vue---循环方式以及跳出循环 在做VUE项目开发过程中&#xff0c;数据循环是常见的操作方式&#xff0c;以下是几种常见的数据循环方式&#xff1a; 一、for循环 let data [1,2,3,4,5,6,7,8,9,10]; for(let i0; i<data.length; i){console.log(data[i]);if(i>5){break;…...

Centos部署资料

1. 离线rpm 1.1 下载地址&#xff1a; 阿里云rpmfind 1.2 本地安装&#xff1a; [rootlocalhost ~]# yum localinstall unzip-6.0-21.el7.x86_64.rpm2. 服务器操作 2.1 修改网络ip [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-script…...

AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D

AI之硬件对比&#xff1a;据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D 目录 Nvidia的显卡 Nvidia的5090/5080/4090/4080&#xff1a;据传传英伟达Nvidia RTX 5090后续推出32GB版且RTX 5080后续或推出24GB版 RTX 5090相较于RTX 4090&…...

其他节点使用kubectl访问集群,kubeconfig配置文件 详解

上述两种方式&#xff1a;可使用kubectl连接k8s集群。 $HOME/.kube/config 是config文件默认路径&#xff0c;要么直接定义环境变量&#xff0c;要么就直接把文件拷过去 config文件里面&#xff0c;定义了context&#xff0c;里面指定了用户和对应的集群信息&#xff1a; ku…...

【鉴权】深入解析OAuth 2.0:访问令牌与刷新令牌的安全管理

目录 引言一、访问令牌&#xff08;Access Token&#xff09;1.1 访问令牌概述1.2 访问令牌的格式1.2.1 JWT&#xff08;JSON Web Token&#xff09;1.2.1.1 JWT 结构1.2.1.2 示例 JWT 1.2.2 Bearer Token 1.3 访问令牌的有效期1.4 访问令牌的工作流程 二、刷新令牌&#xff08…...

【AI视频换脸整合包及教程】AI换脸新星:Rope——让换脸变得如此简单

在数字技术迅猛发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;的应用已经渗透到了我们生活的方方面面&#xff0c;从日常的语音助手到复杂的图像处理&#xff0c;无不体现着AI技术的魅力。特别是在娱乐和创意领域&#xff0c;AI技术更是展现出了惊人的潜力。其中&a…...

限界上下文(Bounded Context)

限界上下文(Bounded Context):领域驱动设计中的重要概念 在领域驱动设计(Domain-Driven Design, DDD)中,限界上下文(Bounded Context)是一个非常重要的概念。限界上下文定义了一个特定领域模型的边界,确保在这个边界内,领域模型的术语、规则和逻辑是一致的。通过明确…...

20241105专家访谈学习资料

“两性一度” 即高阶性、创新性、挑战度。“三性一度”是指教学目标的适应性、教学内容的先进性、教学实施的实践性及教学评价的有效度。“四性一度”是指系统性、层次性、前瞻性、专业性以及培养目标达成度。“二性一度”用词比较规范、标准统一&#xff0c;“三性一度”和“四…...

Docling:开源的文档解析工具,支持多种格式的解析和转换,可与其他 AI 工具集成

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…...

oracle如何在不同业务场景下正确使用聚合查询、联合查询及分组查询?

引言 在数据库管理系统中&#xff0c;SQL&#xff08;结构化查询语言&#xff09;是用于与数据库进行交互的标准语言。 Oracle数据库作为一种广泛使用的关系数据库管理系统&#xff0c;提供了丰富的SQL功能&#xff0c;包括聚合查询、联合查询和分组查询等。 这些功能在数据…...

Hearts of Iron IV 之 Archive Modification

存档位置 C:\Users\XXX\Documents\Paradox Interactive\Hearts of Iron IV\save games 打开文档 打开C:\Users\XXX\Documents\Paradox Interactive\Hearts of Iron IV\settings.txt&#xff0c;将save_as_binaryyes 改成save_as_binaryno&#xff0c;然后退出游戏重新存档&a…...

python manage.py下的命令及功能

python manage.py 是 Django 框架中用于管理 Django 项目的命令行工具 1、startapp&#xff1a; 功能&#xff1a;创建一个新的 Django 应用程序。 用法&#xff1a;python manage.py startapp appname 示例&#xff1a;python manage.py startapp blog 2、startproject&a…...

建筑行业员工离职SOP的数字化管理

在建筑行业&#xff0c;随着数字化转型的深入&#xff0c;对员工离职的标准操作程序&#xff08;SOP&#xff09;进行数字化管理变得尤为重要。这不仅有助于提高管理效率&#xff0c;还能确保离职流程的规范性和合规性。本文将探讨建筑行业如何通过数字化手段管理员工离职SOP&a…...

江协科技STM32学习- P30 FlyMCU串口下载STLink Utility

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

05LangChain实战课 - 提示工程与FewShotPromptTemplate的应用

LangChain实战课 - 提示工程与FewShotPromptTemplate的应用 提示工程的重要性 在LangChain框架中&#xff0c;提示工程是构建有效大模型应用的关键。通过精心设计的提示&#xff0c;我们可以引导大语言模型&#xff08;LLM&#xff09;生成预期的输出。本节课深入探讨了如何利…...

【数据处理】数据预处理·数据变换(熵与决策树)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必备知识_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

UE5 随机生成地牢关卡

参考视频&#xff1a;【UE5 | 教程 | 地编】虚幻引擎5 中创建史诗级 程序化 地下城_哔哩哔哩_bilibili 首先创建一个父项Actor 这个BOX碰撞提是和地板重叠的 这三个是场景组件&#xff0c;这个ExitsFolder下面的箭头等会会在子蓝图中添加 接下来创建BP_MasterRoom的子蓝图&…...

【Cpp】命名空间

前言 在C语言中&#xff0c;命名冲突通常发生在不同的作用域中使用了相同的标识符: 全局变量和局部变量同名&#xff1a; 如果在全局作用域和局部作用域中都定义了同名的变量&#xff0c;那么在局部作用域中&#xff0c;全局变量会被局部变量遮蔽。 int globalVar; // 全局变量…...

ESP32学习笔记——LOG日志库的使用

注&#xff1a;本文由CHATGPT辅助创作&#xff0c;未经验证&#xff0c;实际工程使用请仔细甄别。 对于设置日志级别的几种方式&#xff08;esp_log_level_set、CONFIG_LOG_DEFAULT_LEVEL、CONFIG_LOG_MAXIMUM_LEVEL、LOG_LOCAL_LEVEL &#xff09;容易混淆&#xff0c;特此学习…...

51c~C语言~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12428240 一、C语言和C的区别 ​ C语言虽说经常和C在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准&#xff0c;C是C99标准的。C89就是在1989年制定的标准&#xff0c;如今最新…...

$nextTick 实现原理

Vue 使用 nextTick 来确保数据更新后的 DOM 操作在更新完成后执行。其核心逻辑是将回调放到微任务或宏任务队列中&#xff0c;确保回调在 DOM 更新完成后执行。 Vue.js 会利用不同的浏览器 API 来模拟 nextTick 的延迟执行&#xff0c;通常是通过&#xff1a; Promise&#x…...

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…...