什么是MQ
Cluster集群链接直通车:3v1c
MQ的应用场景
异步解耦
最常见的一个场景是用户注册后,需要发送注册邮件和短信通知,以告知用户注册成功。用户才能使用账号登录。 但是对于用户来说,注册功能实际只需要注册系统存储用户的账户信息后,该用户便可以登录,而后续的注册短信和邮件不是即时需要关注的步骤。
- 用户发起海量秒杀请求到秒杀业务处理系统。
- 秒杀处理系统按照秒杀处理逻辑将满足秒杀条件的请求发送至消息队列 MQ。
- 下游的通知系统订阅消息队列 MQ 的秒杀相关消息,再将秒杀成功的消息发送到相应用户。
- 用户收到秒杀成功的通知。
RocketMQ
RocketMQ是阿里巴巴开源的分布式消息中间件,现在是Apache的一个顶级项目。在阿里内部使用非常广泛,已经经过了"双11"这种万亿级的消息流转。
RocketMQ环境搭建
下载RocketMQ
下载地址:RocketMQ Apache Downloads
环境要求
- Linux 64位操作系统
- 64bit JDK 1.8+
安装RocketMQ
1 解压到安装目录
unzip rocketmq-all-5.0.0-bin-release.zip
mv rocketmq-all-5.0.0-bin-release rocketmq
2 修改启动参数配置
在bin目录下 runserver.sh、runbroker.sh不然会报insufficient memory
修改runserver.sh 中原有内存配置(两处),更改为
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改runbroker.sh 中原有内存配置,更改为
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
修改conf/broker.conf文件,添加配置
#xx.xxx.xx.xxx你的IP,如果是阿里云ECS也只能填写内网IP,公网IP无法识别。
namesrvAddr=xx.xxx.xx.xxx:9876
brokerIP1=xx.xxx.xx.xxx
#文件中添加自动创建topic,如不需要请忽略。
autoCreateTopicEnable=true
#可指定mqbroker启动的端口
listenPort=8911
启动
nohup sh bin/mqnamesrv &
启动日志为:The Name Server boot success.serializeType=JSON 表示启动成功。
# 启动命令,保证地址以及端口能够访问,并且指定配置文件启动。
nohup sh bin/mqbroker -n xx.xxx.xx.xxx:9876 -c ./conf/broker.conf &
日志中显示:boot success 表示启动成功。
RocketMQ修改默认端口
在conf目录下添加namesrv.properties文件,文件中添加端口配置 listenPort=8876。
使用配置信息后台启动namesrv
nohup sh bin/mqnamesrv -c conf/namesrv.properties &
查看broker.log 日志
tail -f ~/logs/rocketmqlogs/broker.log
测试RocketMQ
在bin目录下执行
export NAMESRV_ADDR=localhost:9876 ./tools.sh
#发送消息
org.apache.rocketmq.example.quickstart.Producer
#接受消息
org.apache.rocketmq.example.quickstart.Consumer
关闭RocketMQ
bin/mqshutdown broker
bin/mqshutdown namesrv
RocketMQ控制台安装
1 下载
# 在git上下载下面的工程 rocketmq-console-1.0.0
https://github.com/apache/rocketmq-externals/releases
# 修改配置文件 rocketmq-console\src\main\resources\application.properties
server.port=7777 #项目启动后的端口号
rocketmq.config.namesrvAddr=xx.xxx.xxx.xx:9876 #nameserv的地址,注意防火墙要开启
9876端口
# 进入控制台项目,将工程打成jar包
mvn clean package -Dmaven.test.skip=true
# 启动控制台
java -jar target/rocketmq-console-ng-1.0.0.jar