目录
MQ作用
- 异步
- 解耦
- 削峰
RocketMQ背景
RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。
早期阿里使用ActiveMQ,但是,当消息开始逐渐增多后,ActiveMQ的IO性能很快达到了瓶颈。于是,阿里开始关注Kafka。但是Kafka是针对日志收集场景设计的,他的高级功能并不是很贴合阿里的业务场景。尤其当他的Topic过多时,由于Partition文件也会过多,这就会加大文件索引的耗时,会严重影响IO性能。于是阿里才决定自研中间件,最早叫做MetaQ,后来改名成为RocketMQ。最早他所希望解决的最大问题就是多Topic下的IO性能压力。但是产品在阿里内部的不断改进,RocketMQ开始体现出一些不一样的优势。
MQ对比
| 优点 | 缺点 | 适合场景 |
|-----------------|-------------------------------------------|----------------------|----------------|
| Apache Kafka | 吞吐量非常大,性能非常好,集群高可用。 | 会有丢数据的可能,功能比较单一 | 日志分析、大数据采集 |
| RabbitMQ | 消息可靠性高,功能全面。 | erlang语言不好定制。吞吐量比较低。 | 企业内部小规模服务调用 |
| Apache Pulsar | 基于Bookeeper构建,消息可靠性非常高。 | 周边生态还有差距,目前使用的公司比较少。 | 企业内部大规模服务调用 |
| Apache RocketMQ | 高吞吐、高性能、高可用。功能全面。客户端协议丰富。使用java语言开发,方便定制。 | 服务加载比较慢。 | 几乎全场景,特别适合金融场景 |
RocketMQ环境搭建
- 安装jdk环境,配置环境变量,jdk版本1.8
- 下载并解压rocketmq安装包,rmq版本4.9.5
- 由于虚拟机环境内存很小,而默认jvm内存配置太高, 调低内存(生产环境可不改)
a 修改bin/runbroker.sh文件
b 修改bin/runbroker.sh文件
- 设置broker自动创建topic,在conf/broker.conf加如下配置
cs
autoCreateTopicEnable=true
- 设置环境变量NAMESRV_ADDR(非必须, 测试工具用)
通过vi ~/.bash_profile添加以下配置。然后使用source ~/.bash_profile让配置生效。
cs
export NAMESRV_ADDR='localhost:9876'
- 分别启动nameserver服务和broker服务
cs
# 启动nameserver服务
nohup bin/mqnamesrv &
# 启动broker服务
nohup bin/mqbroker &
# 关闭nameserver服务
bin/mqshutdown namesrv
# 关闭broker服务
bin/mqshutdown broker
jps验证是否启动成功
- 自带tool工具测试发送&消费消息
a 发送消息
cs
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
b 消费消息
cs
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
搭建dashboard可视化界面
-
去官网下载dashboard源码
-
注释默认配置rocketmq.config.namesrvAddr, 后面可动态配置
- 添加解析yml的maven依赖, 不然启动报错
XML
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.27</version>
</dependency>
- maven打包成jar包
cs
mvn clean package -Dmaven.test.skip=true
- 把jar包拷贝到服务器, 并且在同级目录新建一个application.yml文件,配置namesrv地址
application.yml内容配置:
cs
rocketmq.config.namesrvAddr: 192.168.6.128:9876
- java -jar启动jar包
cs
java -jar rocketmq-dashboard-1.0.0.jar
- 访问dashboard界面