RocketMQ安装以及源码启动

news2024/11/17 9:42:05

        RocketMQ是一款消息中间件,在我们项目中主要是使用它来进行异步处理业务以及进行解耦,当然还可以用它实现其他业务需求比如流削峰等等,它提供的功能特别多,比如延迟消费、定时消费、消息重试、顺序消费等等。它的整体设计是追求简单和性能高效。

本篇作为开始学习RocketMq的开篇,在本篇主要完成两部分讲解:

1.安装RocketMq以及RocketMq-Console

2.获取源码

安装RocketMQ以及RocketMQ-Console

1.下载RocketMQ压缩包

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

2.启动NameServer

进入解压目录的bin目录下,修改配置NameServer JVM参数,因为我本身给虚拟机分配的内存比较小,而nameserver默认是占4g,所以我把它改小了。

vim runserver.sh
将:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
改为:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动NameServer:

nohup ./mqnamesrv &

查看是否启动成功:

tail ~/logs/rocketmqlogs//namesrv.log
//结果 看到如下结果表示已经启动成功
2023-05-03 19:45:16 INFO main - tls.client.keyPassword = null
2023-05-03 19:45:16 INFO main - tls.client.certPath = null
2023-05-03 19:45:16 INFO main - tls.client.authServer = false
2023-05-03 19:45:16 INFO main - tls.client.trustCertPath = null
2023-05-03 19:45:16 INFO main - Using JDK SSL provider
2023-05-03 19:45:17 INFO main - SSLContext created for server
2023-05-03 19:45:17 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2023-05-03 19:45:17 INFO NettyEventExecutor - NettyEventExecutor service started
2023-05-03 19:45:17 INFO main - The Name Server boot success. serializeType=JSON
2023-05-03 19:45:17 INFO FileWatchService - FileWatchService service started

3.启动broker

修改broker配置文件:

cd ../config
vim broker.conf
//添加配置
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.54.128
brokerIP2=192.168.54.128
autoCreateTopicEnable=false

修改JVM启动参数:

cd ../bin
vim runbroker.sh
将:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
改为:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m" 

启动broker:

nohup ./mqbroker -c ../conf/broker.conf &
//查看启动是否成功
less ~/logs/rocketmqlogs/broker.log
//输出以下结果表示启动成功
2023-05-03 20:00:11 INFO FileWatchService - FileWatchService service started
2023-05-03 20:00:11 INFO main - Try to start service thread:PullRequestHoldService started:false lastThread:null
2023-05-03 20:00:11 INFO PullRequestHoldService - PullRequestHoldService service started
2023-05-03 20:00:11 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2023-05-03 20:00:11 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK
2023-05-03 20:00:11 INFO main - The broker[broker-a, 192.168.54.128:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2023-05-03 20:00:21 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2023-05-03 20:00:21 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2023-05-03 20:00:21 INFO brokerOutApi_thread_2 - register broker[0]to name server 127.0.0.1:9876 OK
2023-05-03 20:00:51 INFO brokerOutApi_thread_3 - register broker[0]to name server 127.0.0.1:9876 OK
2023-05-03 20:01:11 INFO TransactionalMessageCheckService - create new topic TopicConfig [topicName=RMQ_SYS_TRANS_HALF_TOPIC, readQueueNums=1, writeQueueNums=1, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false]
2023-05-03 20:01:11 INFO brokerOutApi_thread_4 - register broker[0]to name server 127.0.0.1:9876 OK
2023-05-03 20:01:21 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2023-05-03 20:01:21 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2023-05-03 20:01:21 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK 

 查看是否启动成功:

sh ./mqadmin clusterList -n 127.0.0.1:9876
//结果 出现以下结果表示启动成功
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster    broker-a                0     192.168.54.128:10911   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 467532.35 -1.0000

 额外提示:我在使用mqadmin命令时候报了一个错:

Caused by: org.apache.rocketmq.acl.common.AclException: [10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available
//解决办法:将你的jdk安装目录下的lib/ext目录的绝对路径加到bin/tools.sh

JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
修改为
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.aarch64/jre/lib/ext"

 4.安装rocketMq-Console

下载解压:

wget https://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.tar.gz

tar -zxvf rocketmq-console-1.0.0.tar.gz
//进入解压文件夹下的rocketmq-console/src/main/resources修改配置文件
rocketmq.config.namesrvAddr=127.0.0.1:9876
然后回到根目录打包
mvn clean  package -DskipTests
//启动 在target目录下的jar,启动java -jar 启动即可

5.下载源码启动项目

下载源码:Release rocketmq-all-4.7.1 · apache/rocketmq · GitHub

启动NameServer:

在nameServer这个模块启动前先配置环境变量:

这个路径是自己指定的。

distribution/conf/logback_namesrv.xml 拷贝到上一步自己指定目录下的conf目录下。

然后启动,控制台输出:

Connected to the target VM, address: '127.0.0.1:59919', transport: 'socket'
The Name Server boot success. serializeType=JSON

启动broker:

将 distribution/conf/logback_brokerxml、broker.conf 文件拷贝到 上一步设置的目录的conf目录下。

修改 broker.conf 中的配置,主要设置 NameServer 的地址、Broker 的名称等相关属性。

vi broker.conf
# 使用如下配置文件
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
storePathRootDir=/home/dingwpmz/tmp/rocketmq/store
storePathCommitLog=/home/dingwpmz/tmp/rocketmq/store/commitlog
namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.3.10 #自己的主机ip
brokerIP2=192.168.3.10 #自己的主机ip
autoCreateTopicEnable=true

设置broker启动的环境变量和启动参数

启动即可。 

测试:

然后运行 example 中 org/apache/rocketmq/example/quickstart/Producer,这里注意一下,要加下面一行代码

producer.setNamesrvAddr("127.0.0.1:9876");

因为下载的源码默认是没有指定nameServer地址的,我们要手动添加一下。

总结

本篇文章就是介绍了在Linux安装RocketMQ以及源码的下载启动,RocketMQ中有很多好的设计思想值得我们学习。在后面我会介绍RocketMQ的各个模块,包括NameServer、broker以及消息的发送和消费。

 

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

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

相关文章

基于Session实现短信验证码登录流程

文章目录 1 发送短信验证码与登录2 登录拦截功能3 隐藏用户敏感信息4 问题: 多台Tomcat的session共享问题 分析一下流程 发送验证码: 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号…

Django后端-短信验证码登录

前端我使用的是vben-admin(悄悄说一下,好难用。。),对原生的登录页进行了修改。 本文主要讲一下后端实现。 参考文档: djangocelery使用阿里云短信服务异步发送注册验证码_小泽十一章的博客-CSDN博客 django-实现登录…

单链表OJ题:LeetCode--203.移除链表元素

朋友们、伙计们,我们又见面了,今天给大家带来的是LeetCode中203题:移除链表元素 数据结构:数据结构专栏 作 者:stackY、 C 语 言 :C语言专栏 LeetCode--203.移除链表元素:https://leetco…

攻防世界-web-simple js

题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 打开链接: 然后我们会发现不管我们输入什么密码,发现是都是这样的报错 1. 先用bp抓包看看,可以抓到这样的一串js脚本 看不懂…

SVM(基于李航统计学习方法,包含SMO)

文章目录 线性可分SVM和硬间隔最大化函数间隔和几何间隔间隔最大化支持向量 学习的对偶算法 线性SVM和软间隔最大化支持向量 非线性SVM和核函数SMO算法求解二次规划选择变量第一个变量第二个变量 计算 b b b 和 E i E_i Ei​ 线性可分SVM和硬间隔最大化 函数间隔和几何间隔 …

C++11多线程:std::thread创建线程和std::async创建异步任务的区别,std::async创建异步任务后没有被推迟执行。

系列文章目录 文章目录 系列文章目录前言一、thread和async的区别1.1 新线程和异步任务1.2 std::async和std::thread最明显的不同,就是async有时候并不创建新线程。1.3 std::async和std::thread的区别1.4 std::async不确定性问题的解决 二、使用方法2.1 std::async创…

js基础内容

第一种,几乎完全不用 <a href"#" onclick"alert(百度一下)">百度一下</a>第二种,写在script内 <body><a class"baidu" href"#">百度一下</a><script>var baiduAEldocument.querySelector("…

ChatGPT-5即将发布,上千名人士却紧急叫停

ChatGPT4还没有好好体验&#xff0c;比GPT4强大1000倍的ChatGPT5又即将发布&#xff01;届时将彻底改变人工智能领域&#xff0c;并改变我们现有的世界 【ChatGPT 5简介】 OpenAI计划在2023年12月发布其最新且最强大的人工智能模型——ChatGPT 5。该模型具备人工通用智能的能力…

中文大模型安全性哪家强?清华团队新发布

当前大型语言模型的火爆程度我们不用再进行赘述了&#xff0c;伴随着百度文心一言打响国内商业大模型第一枪&#xff0c;华为盘古&#xff0c;阿里通义千问&#xff0c;智谱ChatGLM,科大讯飞星火等国内公司纷纷开始布局。 另一方面由于众所周知的政策原因&#xff0c;和如火如荼…

Threejs进阶之十三:CSS3DRenderer与Tween.js实现粒子小球按规律变化

今天我们使用CSS3DRendererTween.js实现Threejs官方示例中的粒子小球按规律变化的效果&#xff0c;先看下最终实现的效果 先来分析下&#xff0c;这个页面的动画效果是由512个小球组合起来的四种不同变化&#xff0c;分别是曲面、立方体、随机和圆球四种变化&#xff1b;下面我…

Linux——进程间通信(管道)

目录 进程通信的目的 管道 见见猪跑(举个例子) 文件描述符fd与管道的关系(深度理解管道) 什么是管道&#xff1f; 匿名管道 pipe函数概述 父子进程通信时与文件描述符的关系图(理解pipe函数的关键) pipe函数的使用 管道读写规则 管道的大小 自测 使用man 7 pipe查看 …

Unity Timeline使用

Unity Timeline使用 1.创建Timeline&#xff1a;打开面板Window->Sequencing->Timeline (1.1)选择一个要添加 Timeline 的物体&#xff0c;我创建一个物体就叫 Timeline(可以随意命名)&#xff0c;选择Timeline&#xff0c;然后在面板上显示 Create 按钮&#xff0c;如…

Arduino_STM32 之Arduino IDE开发配置

前言 由于选了物联网作为选修课&#xff0c;老师喜欢使用Arduino进行编程&#xff0c;但是也要教我们使用STM32。于是他就让我们使用Arduino IDE开发STM32&#xff08;用Keil 不好吗&#xff1f;&#xff1f;&#xff1f;&#xff09;。 第一章 软件下载 安装Arduino IDE&…

springboot请求响应

SpringBootWeb请求响应 前言 在上一次的课程中&#xff0c;我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 其实呢&#xff0c;是我们在浏览器发起请求…

环形链表 力扣

题目描述 题目要求 判断一个单链表是不是环形链表&#xff0c;是就返回true 不是就返回false 思路 要搞清楚环形链表长啥样环形链表有哪些特征 环形链表顾名思义就是在链表中有一个类似环形的结构&#xff0c; 它和普通单链表的区别就是 你用遍历普通单链表的法子遍历一个环…

k8s基础5——Pod常用命令、资源共享机制、重启策略和健康检查、环境变量、初始化容器、静态pod

文章目录 一、基本了解二、管理命令三、yaml文件参数大全四、创建pod的工作流程五、资源共享机制5.1 共享网络5.2 共享存储 六、生命周期重启策略健康检查七、环境变量八、Init Containe初始化容器九、静态Pod 一、基本了解 概念&#xff1a; Pod是一个逻辑抽象概念&#xff0c…

Vben Admin 自学记录 —— Table组件的基本使用及练习(持续更新中...)

Table 表格 对 antv 的 table 组件进行封装 table相关使用及概念 练习 —— 画一个简单的包含增删改查的表格静态页面&#xff08;不包含相关逻辑和处理&#xff09; 之前相关记录&#xff1a; Vben Admin 自学记录 —— 介绍及使用 1.在之前添加的新路由模块中添加一个表…

TCP/IP网络编程(三)

TCP/IP网络编程读书笔记 第14章 多播与广播14.1 多播14.1.1 多播的数据传输方式及流量方面的优点14.1.2 路由&#xff08;Routing&#xff09;和 TTL&#xff08;Time to Live&#xff0c;生存时间&#xff09;&#xff0c;以及加入组的办法14.1.3 实现多播 Sender 和 Receiver…

使用mybatisX逆向生成数据表实体类(pojo,dao),mapper,service

先看使用mybatisX后生成的文件。 1.先在idea安装mybatisX插件&#xff0c;在file->setting->plugins&#xff0c;搜索mybatisX插件&#xff0c;重新启动idea即可。 2.在idea编辑器右侧点击Database&#xff0c;点击“”链接你的数据库类型&#xff0c;这里我选mysql。 输…

Vue核心 列表渲染 数据监视

1.13.列表渲染 1.13.1.基本列表 v-for指令 用于展示列表数据语法&#xff1a;&#xff0c;这里key可以是index&#xff0c;更好的是遍历对象的唯一标识可遍历&#xff1a;数组、对象、字符串&#xff08;用的少&#xff09;、指定次数&#xff08;用的少&#xff09; <!…