一、介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。RocketMQ是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。
1、应用场景
消息队列在互联网技术开发中使用非常广泛,主要用于解决应用耦合,消息分发,流量削锋等问题。以下介绍消息队列在实际应用中常用的使用场景。
- 应用解耦: 一个简单的用户下单后根据支付金额增加用户积分的场景,传统模式下需要订单模块调用积分模块接口,这样的话订单模块与积分模块就形成了系统耦合,一旦积分模块有修改或出现异常就会影响订单模块功能。引入消息队列方案后, 用户下单成功后,将消息写入消息队列就可以了。积分模块只需要订阅下单消息,从消息队列中获取数据进行消费,这样订单模块和积分模块都只要专注实现自己的功能实现,实现解耦。
- 数据分发:用户下单后日志模块要记录下单日志,库存模块需要减少相应库存,积分模块需要增加用户积分等由下单成功引起的其余模块的业务操作,这个时候可以通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可。
- 削峰填谷:双十一期间系统受到的请求流量猛增,有可能会将系统压垮。传统做法是为了保证系统的稳定性,一般是增加服务器配置、新增服务器做负载均衡。这样的话在正常时间段都能满足服务的情况下采用这种做法无疑是对服务器性能的一种浪费,并不划算。另一种做法是如果系统负载超过阈值,就会阻止用户请求,但在流量高峰时这会影响用户体验。通过消息队列就可以完美解决这个问题,引入消息队列方案后可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提到系统的稳定性和用户体验。
二、RocketMQ安装
1、下载并安装
进入官网选择需要的版本下载安装包。下载编译好的二进制文件,也可以自己选择源文件。这边主要以二进制包的方式来进行安装。
解压安装包,进入安装目录的bin文件夹,这里包含MQ启动脚本,包括sh和cmd脚本。
修改虚拟机内存,RocketMQ 默认的虚拟机内存较大,启动 Broker 或者 NameServer 可能会因为内存不足而导致失败,需要根据实际情况修改修改Broker和NameServer的虚拟机内存。编译runbroker和runserver文件(win环境下修改cmd脚本,linux环境下修改sh脚本即可),以下是参考设置:
# 以linux环境下为例,编辑 runbroker.sh 和 runserver.sh 修改默认 JVM 大小
$ vim bin/runbroker.sh
# 修改-server参数
set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g"
$ vim bin/runserver.sh
# 修改-server参数
set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
2、启动RocketMQ
配置环境变量:
启动NameServer
- windows命令:start mqnamesrv.cmd
- linux命令:sh mqnamesrv
- 后台启动:nohup sh mqnamesrv &
启动Broker
- windows环境下启动:.\mqbroker -n 127.0.0.1:9876
- linux环境下启动:sh mqbroker -n 127.0.0.1:9876
- 后台启动:nohup sh mqbroker -n localhost:9876 &
- 指定配置文件启动:nohup sh mqbroker -n localhost:9876 -c 配置文件目录 &
如果 MQ 处于开启成功后,会有四个端口,其中,一个 namesrv 端口,默认是 9876,还有三个 broker 端口(10909、10911、10912)。如果需要本地开发环境连接到rocketmq的服务器进行消息推送,需要开启修改对应的配置文件实现。配置文件再mq根目录下的conf文件夹中。
关闭MQ服务
# windows环境下启动
- .\mqshutdown namesrv //关闭NameServer
- .\mqshutdown broker //关闭Broker
# linux环境下启动
- sh bin/mqshutdown namesrv //关闭NameServer
- sh bin/mqshutdown broker //关闭Broker
三、搭建可视化监控平台
rocketmq-dashboard是RocketMQ的一个拓展开源项目,可以对MQ进行可视化监控。下载地址:https://github.com/apache/rocketmq-dashboard
下载项目并将配置文件中的namesrv地址改成自己的NameServer地址;
配置完成后进行编译打包,然后启动打包完成的jar就可以了。项目jdk版本是1.8,如果idea中jdk版本过高需要提升lombok包的版本。
使用 mvn package -Dmaven.test.skip=true 命令,忽略测试用例进行打包。
找到打好的jar包,通过命令提示符运行该jar包。启动成功后就可以通过浏览器访问 http://ip地址:端口 进入控制台页面,可视化查询MQ服务的相关信息,如下图所示: