简介
消息队列:消息队列是一种“先进先出”的数据结构
应用场景:应用解耦,流量削峰,数据分发
mq的缺点包含以下几点:
-
系统可用性降低
系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
如何保证MQ的高可用?
-
系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?
-
一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。
如何保证消息数据处理的一致性?
单节点RocketMQ
安装
从官网上下载RocketMQ安装包,我这里下载的是rocketmq-all-4.4.0-bin-release.zip
前提:拥有jdk环境。
mkdir /usr/soft
cp rocketmq-all-4.4.0-bin-release.zip /usr/soft
cd /usr/soft
unzip rocketmq-all-4.4.0-bin-release.zip
mv rocketmq-all-4.4.0-bin-release /usr/local/rocketmq
cd /usr/local/rocketmq
ll
bin目录下是可执行文件,conf下是RocketMQ的配置文件
启动NameServer
修改内存配置
vi bin/runbroker.sh
vi bin/runserver.sh
nohup sh bin/mqnamesrv &
#查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log
启动Broker
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log
#如果能看到namesrv和broker,则说明启动成功
jps
关闭rocketmq命令
sh bin/mqshutdown namesrv
sh bin/mqshutdown broker
测试消息发送和接收
发送消息
#设置环境变量
export NAMESRV_ADDR=localhost:9876
#使用安装包的demo发送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息
# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
如果消费方打印消息,则消息发送和接收测试完成。