RocketMQ入门之学习环境搭建

news2025/1/24 14:29:39

文章目录

  • 0.前言
  • 1.使用docker 方式搭建RocketMQ学习环境
    • 启动NameServer和 启动Broker常见报错
  • 2.使用源码安装方式
  • 3. 常见问题
  • 3. 参考文档

在这里插入图片描述

0.前言

在学习RocketMQ 需要先自行搭建一个RocketMQ 服务端。本节我们先来搭建一个简单的学习环境。下个章节,我们写个简单的Spring Boot 集成RocketMQ示例项目理解和验证一下RocketMQ的特性。
如果已经安装了RocketMQ 学习环境可以略过此章节《【实践篇(二)】SpringBoot集成Apache RocketMQ详解》

1.使用docker 方式搭建RocketMQ学习环境

推荐使用docker 方式

  1. 从docker hub 上搜索 Apache RocketMQ 获得到最新版本为rocketmq-5.1.3
    latest tag的说明
    在这里插入图片描述

非常好,我们将使用Docker来安装RocketMQ,这是一个非常简单且有效的方式。下面是详细的步骤:

  1. 安装并启动Docker
    如果你还没有安装Docker,你可以从Docker官方网站下载并安装。安装完成后,确保Docker已经启动。

  2. 拉取RocketMQ的Docker镜像

docker pull apache/rocketmq

在这里插入图片描述
3. 启动NameServer
RocketMQ的工作需要依赖于一个NameServer。输入以下命令来启动一个NameServer:

启动容器

docker run -itd --restart=always --name rmqnameserver --privileged=true -p 9876:9876   -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq sh mqnamesrv 
#查看容器进程
docker ps -a
#查看日志 
docker logs -f 容器id

在这里插入图片描述

如果报错openJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c8000000, 4160749568, 0) failed; error=‘Cannot allocate memory’ (errno=12)。先去掉后面的启动命令sh mqnamesrv 。先把容器启动起来,进容器修改脚本,然后手动在容器执行 sh mqnamesrv .

  1. 启动Broker
    接着,我们需要启动一个Broker。输入以下命令来启动Broker:

    docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10909:10909 -p 10911:10911 -p 10912:10912 -v D:/app/rocketmq/data/broker/logs:/home/rocketmq/logs -v D:/app/rocketmq/data/broker/store:/home/rocketmq/store -v D:/app/rocketmq/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    
    
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

namesrvAddr=172.20.6.37:9876
brokerIP1=172.20.6.37
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911

启动NameServer和 启动Broker常见报错

在服务器环境 内存不足的情况下会报错。
内存不足报错

penJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c8000000, 4160749568, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 4160749568 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/rocketmq/rocketmq-4.9.2/bin/hs_err_pid61.log

解决办法
启动命令 不要带 sh mqbroker 或 先把容器启动起来进容器,修改启动脚本的参数 手动启动 mqbroker

runbroker.sh 修改这个脚本的参数 拉到最底下。
在这里插入图片描述
重新启动OK
在容器内执行

# 容器内执行
nohup sh mqbroker &
# 查看日志
tail -f nohup.out

在这里插入图片描述

  1. 验证安装
    你可以通过访问 http://ip:9876 来访问RocketMQ的Dashboard,从而验证RocketMQ是否已经成功安装并运行。
    在这里插入图片描述
    在这里插入图片描述

2.使用源码安装方式

在CentOS 7上安装RocketMQ学习环境

1. 安装JDK
如果服务器没有jdk 需要安装
RocketMQ需要Java环境,推荐使用Java 8。可以通过以下命令进行安装:

sudo yum install java-1.8.0-openjdk-devel

安装完成后,通过java -version确认JDK安装成功。

2. 下载并解压RocketMQ

下载RocketMQ的tar包,这里以4.7.1版本为例:

wget https://archive.apache.org/dist/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

解压缩:

unzip rocketmq-all-4.7.1-bin-release.zip

3. 启动RocketMQ

首先启动Name Server:

cd rocketmq-all-4.7.1-bin-release/bin
nohup sh mqnamesrv &

然后,启动Broker:

nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

4. 验证RocketMQ是否启动成功

通过以下命令,如果看到Broker的信息,那么恭喜你,RocketMQ已经启动成功:

sh mqadmin clusterList -n localhost:9876

3. 常见问题

RocketMQ的官方GitHub问题链接:RocketMQ Issues
2. 内存不足问题:RocketMQ需要足够的内存才能运行。如果出现内存不足的错误,你可以增加系统的内存,或者调整RocketMQ的内存配置。我的学习环境服务器配置比较低,安装过程出现了内存不足情况,解决方法修改了启动脚本中的内存设置,直接给一个比较小的值,就ok了。
3. 端口冲突问题:如果RocketMQ的端口(默认为10911和10909)已经被其他应用程序占用,RocketMQ将无法启动。你可以更改RocketMQ的端口,或者停止占用这些端口的应用程序。
4. 启动脚本问题:RocketMQ的启动脚本有一些特殊的要求,如果不正确地修改了这些脚本,可能会导致RocketMQ启动失败。
5. 兼容性问题:RocketMQ可能不兼容某些特定的操作系统或JDK版本。你需要确保你的环境满足RocketMQ的系统要求。
6. broker的IP配置问题,如果docker 安装需要将Broker的Ip配置成宿主机IP.不然在发送消息的时候报错,连接Broker失败。解决办法,进到容器里。进入conf 目录修改Broker.conf 添加brokerIP1 = 你的宿主机IP

2023-09-09 16:44:14.984 ERROR 22980 --- [nio-8080-exec-1] o.a.r.spring.core.RocketMQTemplate       : syncSend failed. destination:test-topic, message:GenericMessage [payload=test a msg, headers={id=be655749-804a-f36e-40f5-c160c74e4ff0, timestamp=1694249048593}] 
2023-09-09 16:44:15.000 ERROR 22980 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.messaging.MessagingException: Send [3] times, still failed, cost [6386]ms, Topic: test-topic, BrokersSent: [698f11314447, 698f11314447, 698f11314447]
See http://rocketmq.apache.org/docs/faq/ for further details.; nested exception is org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [6386]ms, Topic: test-topic, BrokersSent: [698f11314447, 698f11314447, 698f11314447]
See http://rocketmq.apache.org/docs/faq/ for further details.] with root cause

org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.8:10911> failed
	at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:392) ~[rocketmq-remoting-4.5.2.jar:4.5.2]
	at org.apache.rocketmq.client.impl.MQClientAPIImpl.sendMessageSync(MQClientAPIImpl.java:465) ~[rocketmq-client-4.5.2.jar:4.5.2]

3. 参考文档

https://juejin.cn/post/7253000004164878391

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

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

相关文章

一起学数据结构(5)——栈和队列

1. 栈的相关定义及特点&#xff1a; 1. 栈的相关定义&#xff1a; 在正式介绍栈的定义之前&#xff0c;首先来回顾一下关于线性表的定义&#xff1a; 线性表是具有相同数据类型的个数据元素的有限序列&#xff0c;其中为表长。当时&#xff0c;可以把线性表看作一个空表&…

图床项目进度(三)——文件展示页

前言 该项目作为一个类网盘项目&#xff0c;主要包括上传下载&#xff0c;引用&#xff0c;预览等功能。 大致功能&#xff1a; 图片预览 这里的图片预览我使用的一个插件 const state: any reactive({ image: https://pic35.photophoto.cn/20150511/0034034892281415_b…

悲观锁和乐观锁、缓存

悲观锁&#xff1a; 悲观锁的实现通常依赖于数据库提供的机制&#xff0c;在整个处理的过程中数据处于锁定状态&#xff0c;session的load方法有一个重载方法&#xff0c;该重载方法的第三个参数可以设置锁模式&#xff0c;load(object.class , int id,LockMode.?)&#xff0…

deepin 如何卸载软件

文章目录 卸载软件&#xff08;正文&#xff09; 通常来讲在官方的应用商场卸载即可。 但是呢&#xff1f; 很不幸的是&#xff0c;没能够彻底删除软件。还是能够在启动器界面上看到应用。 这时候&#xff0c;你右键卸载&#xff0c;会提示“卸载失败”。如下图&#xff1a; …

VirtualBox RockyLinux9 网络连接

有几次都是隔一段时间之后启动虚拟机&#xff0c;用第三方ssh工具就连接不上了。 简单记录一下。 1、VirtualBox设置 2、IP设置 cd /etc/NetworkManager/system-connections/ vim enp0s3.nmconnection[connection] idenp0s3 uuid9c404b41-4636-397c-8feb-5c2ed38ef404 typeet…

windows nvm 安装 以及常用的命令

1 nvm 下载 链接&#xff1a;https://github.com/coreybutler/nvm-windows/releases 可下载以下版本&#xff1a; nvm-noinstall.zip&#xff1a;绿色免安装版&#xff0c;但使用时需要进行配置。 nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 2 安装&#xff08…

python-38-python定时任务框架

Python定时任务 Python任务调度模块 – APScheduler python调度框架APScheduler使用详解 APScheduler动态增、删、改任务 apscheduler mysql 持久化任务 APScheduler调度框架 在项目中&#xff0c;我们可能遇到有定时任务的需求。 其一&#xff1a;定时执行任务。例如每天早上 …

为什么要学习源码之Java篇

为什么学习源码 大厂面试必问。二次开发。提升代码阅读能力&#xff0c;更能输出优质代码。提升技术功底。拥抱开源社区。快速定位线上问题。 学习源码的方式 首先最重要的是学会使用。具有全局观。先对大致有个细节的了解&#xff0c;一开始不要太关注于细节。学会看注释&a…

【计算机网络】TCP传输控制协议——三次握手

文章目录 握手的流程常考考点 握手的流程 一开始&#xff0c;客户端和服务端都处于CLOSE状态&#xff0c;先是服务端监听某个端口&#xff0c;处于LISTEN状态。然后客户端主动发起连接SYN&#xff0c;之后处于SYN-SEND状态。服务端收到发起的连接&#xff0c;返回SYN&#xff0…

Spring Data Commons远程命令执行漏洞复现(CVE-2018-1273)

一、漏洞说明 Spring Data是一个用于简化数据库访问&#xff0c;并支持云服务的开源框架,包含Commons、Gemfire、JPA、JDBC、MongoDB等模块。此漏洞产生于Spring Data Commons组件&#xff0c;该组件为提供共享的基础框架&#xff0c;适合各个子项目使用&#xff0c;支持跨数据…

快速学会git版本管理——创建分支和合并分支

首先创建分支 git创建分支只需要使用switch 命令&#xff1a; git switch -c 分支名 创建分支并切换到该分支 大家看后面的括号里已经变成了dev 说明我们切换成功了。 然后想要合并分支就在 创建的分支中 进行提交修改的内容&#xff0c;还是通过&#xff1a;add 命令和co…

EasyExcel入门(最简单的读)

官网&#xff1a;EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com) 因为暂时项目没有用到&#xff0c;所以不急&#xff0c;知道了这个技术。就想着学着用一下&#xff01; 最简单的读 先看官方文档给的用法和解释&#xff01;&#xff01;&#xff01…

开开心心带你学习MySQL数据库之第八篇

索引和事务 ~~ 数据库运行的原理知识 面试题 索引 索引(index) > 目录 索引存在的意义,就是为了加快查找速度!!(省略了遍历的过程) 查找速度是快了&#xff0c;但是付出了一定的代价!! 1.需要付出额外的空间代价来保存索引数据 2.索引可能会拖慢新增,删除,修改的速度 ~~ …

信息系统项目管理师(第四版)教材精读思维导图-第十四章项目沟通管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图XMind源文件 14.1 管理基础 14.2 管理过程 14.3 规划沟通管理 14.4 管理沟通 14.…

机器学习:使用PCA简化数据

文章目录 使用场景主成分分析&#xff08;Principal component analysis&#xff09;实验&#xff1a;对半导体数据&#xff08;590个特征&#xff09;进行降维处理 使用场景 我们通过电视看实况足球&#xff0c;电视显示屏有100万个像素点&#xff0c;球所占的点数为100个。人…

Collectors类作用:

一、Collectors类&#xff1a; 1.1、Collectors介绍 Collectors类&#xff0c;是JDK1.8开始提供的一个的工具类&#xff0c;它专门用于对Stream操作流中的元素各种处理操作&#xff0c;Collectors类中提供了一些常用的方法&#xff0c;例如&#xff1a;toList()、toSet()、to…

真的有线上兼职吗?推荐几个靠谱的线上兼职!

在这个互联网普及&#xff0c;信息爆炸的时代&#xff0c;线上赚钱已经成为一个热门的话题。每个人都想通过互联网赚钱&#xff0c;有些人得到钱&#xff0c;给普通人机会&#xff0c;给骗子一些机会&#xff0c;世界是两面&#xff0c;线上兼职赚钱的方式&#xff01;有好有坏…

python中的继承

要理解继承首先要有父类和子类的概念&#xff0c;可以理解成子类从父类中继承父类的属性和方法 创建父类 class Pet:def __init__(self,name,age):self.name nameself.age agedef jump(self):print(self.name"在跳")创建子类 class Cat(Pet):pass mycatCat(&quo…

HTML的有序列表、无序列表、自定义列表

目录 背景: 过程: 无序列表: 简介: 代码展示: 效果展示:​ 无序列表: 简介: 效果展示:​ 自定义列表: 简介&#xff1a; 效果展示: 总结&#xff1a; 背景: 1.有序列表&#xff08;Ordered List&#xff09;&#xff1a; 有序列表是最早的列表类型之一&#xff…

编译器02-词法分析

一&#xff1a;简述 词法分析含义&#xff1a;为了翻译语言&#xff0c;编译器把程序各种成分拆开&#xff0c;那如何拆&#xff0c;首先第一步就是将输入分解成一个个独立的单词(token)&#xff0c;这一过程叫词法分析。 二&#xff1a;单词(token)分为哪些种类 保留字…