rocketmq-安装篇(一)

系列文章目录

rocketmq-安装篇(一)
rocketmq-手把手搭建集群模式(二)
rocketmq-各类型消息实战(三)
rocketmq-名词解释(四)
rocketmq-消息存储(五)



前言

在实际做项目时,经常遇到跨语言、跨系统、短时高流量、异步处理的问题,传统的方法一般是开个一个中间的服务、缓存、启用多线程来处理种种复杂的问题,处理起来捉襟见肘。而消息队列服务正好可以完美处理系统解耦、削峰、跨平台、异步等需求,有时候也用于数据一致性。


一、mq是什么?

1.1 定义

消息队列-mq:从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的的软件系统。就像是一个完成的快递系统,通过快递系统可以生产快递(你给内容,他们包装完成的快递)、传递(通过仓库、渠道传递)、消费(放到你们指定的收货地点,如果是签名的,当时就可以确认反馈);整个传递的内容及实时位置,传递状况,快递系统都有留有数据。

1.2 作用

  • 1.削峰:当系统流量处在高峰期时,将数据先暂存,利用这个缓冲机制,再慢慢处理。
  • 2.解耦:低耦合或者跨系统的业务可以通过mq中转解耦。解耦带来的好处就是:提高系统的可用性、业务完整性
  • 3.消息分发:发送消息给多个接收端接收。(异步、数据一致性等)

二、安装部署步骤(单主)

官网英文快速教程:http://rocketmq.apache.org/docs/quick-start/

1.安装环境说明

本文环境:CentOS 7+JDK1.8+maven 3.2.2+RocketMQ 4.2.0
在这里插入图片描述

2.下载&安装

1、
Apache 官网下载:直接下载整个 RocketMQ 项目的源码(带source的,也可以直接下载二进制文件[带Binary的],二进制的不需要再编译部署,可以直接使用),如:https://archive.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
直接下载命令:wget https://archive.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
或者本地下载完上传都可以
2、 GitHub 官网下载:因为项目是开源的,所以可以直接从 GitHub 下载整个项目的源码,https://github.com/apache/rocketmq

/*
1、解压缩
2、mvn安装
*/
shell> unzip rocketmq-all-4.2.0-source-release.zip
shell> cd rocketmq-release-4.2.0/
shell> mvn -Prelease-all -DskipTests clean install -U
//真正系统数据都在此目录
shell> cd distribution/target/apache-rocketmq 
// 编译后在distribution/target/apache-rocketmq,这个目录可以单独拿出来启动

3.部署服务

3.1启动namesrv、 broker (单主)

注意:先启动nameserv,再启动broker
代码如下:

//启动namesrv,nohup 后台启动
shell>pwd
/usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq
shell> nohup sh bin/mqnamesrv &
//启动broker,nohup 后台启动
shell> nohup sh bin/mqbroker -n localhost:9876 &
//查看java进程是否成功启动
shell> jps
2836 BrokerStartup
2692 NamesrvStartup
2843 Jps
1180 Bootstrap

//log:默认在当前用户目录下 /userHome/logs/rocketmqlogs

*********************************
//配置开机启动,在vi /etc/rc.d/rc.local 中添加下面的启动命令即可
./usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq/bin/mqnamesrv >all.log 2>&1 &
./usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq/bin/mqbroker -n 127.0.0.1:9876  &

此时,简单的rocketmq服务算是启动成功了,namersrv默认端口是9876,可以通过配置修改。

3.2关闭broker, nameserv

注意:与启动顺序相反进行关闭,先关闭 broker、在关闭 nameserv
代码如下:

shell>pwd
/usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq
//关闭broker
shell>sh /bin/mqshutdown broker
//关闭namesrv
shell>sh /bin/mqshutdown namesrv
shell> jps
2843 Jps
1180 Bootstrap

3.3测试发送和接收消息

官网提供了快速测试发送接收消息的例子

发送消息,运行之后会自动发送大量的消息,之后会自动退出,用于测试搭建的测试环境是否可用:

//当前面目录为/usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq
shell>export NAMESRV_ADDR=localhost:9876
shell>sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId=C0A895800C22070DEA4E0844718503DB, offsetMsgId=C0A8958000002A9F000000000004A098, messageQueue=MessageQueue [topic=TopicTest, brokerName=localhost.localdomain, queueId=2], queueOffset=346]
SendResult [sendStatus=SEND_OK, msgId=C0A895800C22070DEA4E084471AA03DC, offsetMsgId=C0A8958000002A9F000000000004A14C, messageQueue=MessageQueue [topic=TopicTest, brokerName=localhost.localdomain, queueId=3], queueOffset=346]
SendResult [sendStatus=SEND_OK, msgId=C0A895800C22070DEA4E084471D503DD, offsetMsgId=C0A8958000002A9F000000000004A200, messageQueue=MessageQueue [topic=TopicTest, brokerName=localhost.localdomain, queueId=0], queueOffset=348]
SendResult [sendStatus=SEND_OK, msgId=C0A895800C22070DEA4E084471F403DE, offsetMsgId=C0A8958000002A9F000000000004A2B4, messageQueue=MessageQueue [topic=TopicTest, brokerName=localhost.localdomain, queueId=1], queueOffset=348]
... ...

接收消息,运行之后会通过多线程方式自动接收消息,之后不会自动退出:

//当前面目录为/usr/local/rocketmq-release-4.2.0/distribution/target/apache-rocketmq
shell>sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_10 Receive New Messages: [MessageExt [queueId=0, storeSize=180, queueOffset=338, sysFlag=0, bornTimestamp=1614666697956, bornHost=/192.168.149.128:47168, storeTimestamp=1614666697969, storeHost=/192.168.149.128:10911, msgId=C0A8958000002A9F00000000000485E0, commitLogOffset=296416, bodyCRC=329761110, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=TopicTest, flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=351, CONSUME_START_TIME=1614666731966, UNIQ_KEY=C0A895800C22070DEA4E08445CE403B5, WAIT=true, TAGS=TagA}, body=18]]] 
ConsumeMessageThread_12 Receive New Messages: [MessageExt [queueId=0, storeSize=180, queueOffset=337, sysFlag=0, bornTimestamp=1614666697812, bornHost=/192.168.149.128:47168, storeTimestamp=1614666697826, storeHost=/192.168.149.128:10911, msgId=C0A8958000002A9F0000000000048310, commitLogOffset=295696, bodyCRC=437357949, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=TopicTest, flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=351, CONSUME_START_TIME=1614666731964, UNIQ_KEY=C0A895800C22070DEA4E08445C5403B1, WAIT=true, TAGS=TagA}, body=18]]] 
... ...

4.部署console

4.1、本地部署console

1、从github:https://github.com/apache/rocketmq-externals 直接下载项目源码,之后通过idea直接引用里面的rocketmq-console模块即可,
在这里插入图片描述
2、修改application.properties配置文件,修改为自己的namesrv地址即可:
rocketmq.config.namesrvAddr=192.168.149.128:9876
3、启动 APP 启动类,效果如下:
在这里插入图片描述
这里能看到上面测试发送的消息记录:
在这里插入图片描述

4.2、linux部署console

紧着本地部署,在你修改完配置文件后,进入console模块目录下:\rocketmq-externals-master\rocketmq-console,cmd 命令下执行:mvn clean package -Dmaven.test.skip=true (直接通过idea 操作也可以),会在target目录下生产一个 rocketmq-console-ng-2.0.0.jar项目,该项目是一个springboot项目,可以使用java -jar rocketmq-console-ng-2.0.0.jar 启动项目。
通过xftp 把jar拷贝到linux上对应的目录下,直接启动即可。
在这里插入图片描述

[root@localhost local]# java -jar rocketmq-console-ng-2.0.0.jar 
// 后台启动
[root@localhost local]#  nohup java -jar rocketmq-console-ng-2.0.0.jar  &
//默认8080端口,如果端口被占了,可以指定  java -jar rocketmq-console-ng-2.0.0.jar  --server.port=8081 

在这里插入图片描述
启动成功后,直接访问你的地址,效果如下:
在这里插入图片描述

5.过程中的问题解决

5.1、内存分配失败

问题1: Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error=‘Cannot allocate memory’ (errno=12)
分析: 因为 apache-rocketmq/bin 目录下启动 nameserv 与 broker 的 runbroker.sh 和 runserver.sh 文件中默认分配的内存太大,而系统实际内存却太小导致启动失败。官方要求是必须有 4g 可用内存以上。
方案: 找到下面的 distribution/target/apache-rocketmq/bin 下的 runbroker.sh 和 runserver.sh 文件,然后进行调整。

//调整runbroker.sh,是服务器情况调整即可:
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"


//调整runserver.sh,是服务器情况调整即可:
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

三、总结

首先明白mq本身是怎么一回事,及其作用及使用场景等,自己再跑个完整的例子,这个过程看着简单,但也会遇到很多问题,当你把一个个问题解决后,学的才深刻。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值