MQ知识笔记-----RocketMQ

MQ知识笔记-----RocketMQ

RocketMQ

RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。

目前RocketMQ在阿里云上有一个购买即可用的商业版本,商业版本集成了阿里内部一些更深层次的功能及运维定制。我们这里学习的是Apache的开源版本。开源版本相对于阿里云上的商业版本,功能上略有缺失,但是大体上功能是一样的。

官网地址: http://rocketmq.apache.org
github地址:https://github.com/apache/rocketmq

安装RocketMQ

  1. 安装jdk
  2. 本地解压rocketmq压缩包后,上传到服务器,配置环境变量
vim /etc/profile

export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release
export PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin

# 令环境变量生效
source /etc/profile

运行RocketMQ

运行之前,需要对RocketMQ的组件结构有个大体了解:

MQ知识笔记-----RocketMQ_第1张图片
RocketMQ由以下这几个组件组成:

  • NameServer:提供轻量级的Broker路由服务
  • Broker:实际处理消息存储、转发等服务的核心组件
  • Producer:消息生产者集群,通常是业务系统中的一个功能模块
  • Cosumer:消息消费者集群,通常是业务系统中的一个功能模块

所以我们要启动RocketMQ服务,需要先启动NameServer。

启动NameServer

启动NameServer非常简单, 在$ROCKETMQ_HOME/bin目录下有个mqadminsrv。直接执行这个脚本就可以启动RocketMQ的NameServer服务。

但是要注意,RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置。但是通常我们用虚拟机的话都是不够4G内存的,所以需要调整下JVM内存大小。修改的方式是直接修改runserver.sh。 用vi runserver.sh编辑这个脚本,在脚本中找到这一行调整内存大小为512M

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m 
- XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

用静默方式启动NameServer

# 启动之前先授权
chmod +x mqadmin mqbroker mqshutdown  mqnamesrv

# 启动NameServer
nohup ./mqnamesrv &

# 启动后查看nohup.out文件,
# 发现 The Name Server boot success. serializeType=JSON,启动成功
# 并且jps可以发现一个NamesrvStartup进程
tail -f nohup.out

启动Broker

启动Broker的脚本是runbroker.sh。Broker的默认预设内存是8G,启动前,如果内存不够,同样需要调整下JVM内存。vi runbroker.sh,找到这一行,进行内存调整:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

然后我们需要找到$ROCKETMQ_HOME/conf/broker.conf, vi指令进行编辑,在最下面加入一个配置:

# 允许自动创建主题
autoCreateTopicEnable=true

然后也以静默启动的方式启动runbroker.sh

nohup ./mqbroker &

启动完成后,同样是检查nohup.out日志,有这一条关键日志就标识启动成功了。 并且jps指令可以看到一个BrokerStartup进程。

The broker[worker1, 192.168.232.128:10911] boot success. serializeType=JSON

*在观察runserver.sh和runbroker.sh时,我们还可以查看到其他的JVM执行参数,这些参数都可
以进行定制。例如一个比较有意思的地方,nameServer使用的是CMS垃圾回收器,而Broker使用的是G1垃圾回收器。 *

命令行快速验证

在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。

  • 首先需要配置一个环境变量NAMESRV_ADDR指向我们启动的NameServer服务。
export NAMESRV_ADDR='localhost:9876' 
  • 然后启动消息生产者发送消息:默认会发1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
  • 然后启动消息消费者接收消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
  • 启动后,便可消费到消息(这个Consume指令并不会结束,他会继续挂起,等待消费其他的消息。我们可以使用CTRL+C停止该进程。)
    在这里插入图片描述

日志中MessageExt后的整个内容就是一条完整的RocketMQ消息。其中比较关键的属性有:brokerName,queueId,msgId,topic,cluster,tags,body,transactionId。

关闭RocketMQ服务

# 1.关闭NameServer 
sh bin/mqshutdown namesrv 
# 2.关闭Broker 
sh bin/mqshutdown broker

你可能感兴趣的:(中间件知识,中间件,java)