一、MQ 介绍
MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据机构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。
二、rocketMQ的作用
RocketMQ是一个分布式消息中间件,并支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。
RocketMQ以Topic来管理不同应用的消息,对于生产者(producer)而言,发送消息时需要指定消息的Topic,对于消费者(consumer)而言,在启动后需要订阅相应的Topic,然后可以消费相应的消息。Topic是逻辑上的概念,在物理实现上,一个Topic由多个Queue组成,采用多个Queue的好处是可以将Broker存储分布式化,提高系统性能。
三、rocketMQ安装
1、基于linux系统下的安装,首先需要先下载rocketMQ
官网:https://github.com/apache/rocketmq/tree/master/docs/cn
百度网盘:https://pan.baidu.com/s/1E8ImGssvhqG5WgCarZBlJA
提取码: ehan
2、将下载好的rocketMQ上传到/usr/local/rocketMQ下并解压
cd /usr/local/rocketMQ
unzip rocketmq-all-4.8.0-bin-release.zip
解压后文件目录结构
3、启动 mqnamesrv
切换到 bin目录下
//切换目录
cd /usr/local/rocketMQ/rocketmq-all-4.8.0-bin-release/bin
//启动
nohup sh mqnamesrv &
4、启动broker
//切换目录
cd /usr/local/rocketMQ/rocketmq-all-4.8.0-bin-release/bin
//启动
nohup sh mqbroker -n localhost:9876 &
5、查看服务是否启动
终端输入 jps 命令
jps
如果出现NamesrvStartup,BrokerStartup即启动成功
6、错误:如果没有启动成功,则可能是rocketMQ启动内存太大,需要修改启动参数
1、使用 vi 打开bin目录下的 runbroker.sh以及runserver.sh
2、修改参数为
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m" 并保存
3、重启 nohup sh mqbroker -n localhost:9876 &
//路径切换
cd /usr/local/rocketMQ/rocketmq-all-4.8.0-bin-release/bin
//vi 打开runbroker.sh文件
vi ./runbroker.sh
//vi 打开runserver.sh文件
vi ./runserver.sh
//修改参数为JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"并保存
//重启 mqbroker
nohup sh mqbroker -n localhost:9876 &
7、至此rocketMQ启动完成,测试rocketMQ的生产消息与消费消息
1)、打开两个中端,都切换到bin目录下
2)、第一个终端生产消息,命令如下:
//配置如下
// 1、切换到bin目录
cd usr/local/rocketMQ/rocketmq-all-4.8.0-bin-release/bin
// 2、配置临时变量
export NAMESRV_ADDR=localhost:9876
// 3、执行生产消息命令
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
3)、第二个终端消费消息,命令如下:
//配置如下
// 1、切换到bin目录
cd usr/local/rocketMQ/rocketmq-all-4.8.0-bin-release/bin
// 2、配置临时变量
export NAMESRV_ADDR=localhost:9876
// 3、执行消费消息命令
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
至此,生产消息者再次执行
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
时消费服务就会时刻监听生产服务的消息,并且生产服务生产完消息后就会结束,而消费服务一直处于监听状态,监听生产服务的消息。