RocketMQ整体理解和实战(一)

246 阅读2分钟

一、MQ介绍

image.png

1、什么是MQ?为什么要用MQ?

是一种FIFO的数据结构。生产者发送消息到MQ进行排队,然后按原来的顺序由消费者进行处理。

作用主要有以下三个方面:

异步:提升系统的响应速度、吞吐量

解耦:服务解耦,可以减少服务间的影响,提升整体的稳定性以及可扩展性。另外解耦可以实现数据分发,消息的消费者变化对生产者没有影响。

削峰:应对突发的流量冲击。

2、MQ的优缺点

系统可用性降低:引用的组件越多,系统的稳定性就会变差,所以需要考虑MQ的高可用。

系统复杂度提高:以前的同步调用变为异步调用,数据的链路就会变得复杂。同时会引入经典的MQ三大问题,如何保证消费不会丢失?如何保证不会重复消费?如何保证消费的顺序性问题?

消息的一致性问题:

如果节点中某一个节点业务成功,但是平行节点业务失败,是否需要业务回滚或者业务重试?需要考虑消息数据处理的一致性问题。

3、几大MQ产品特点比较

kafka:优点是吞吐量大,性能好,集群高可用。缺点是会丢数据,功能单一。

rabbitMQ:优点是消息可靠性高,功能全面。缺点是吞吐量低,消息积累会影响性能,erlang不好定制,镜像队列高可用冗余。

rocketMQ:高吞吐,高性能,高可用,功能全面。缺点配置上有点小复杂。

二、RocketMQ快速实战

1、下载并安装rocketMQ 4.9.2

unzip rocketmq-all-4.9.2-source-release.zip

cd rocketmq-all-4.9.2/

mvn-Prelease-all-DskipTestscleaninstall-U

cd distribution/target/rocketmq-4.9.2/rocketmq-4.9.2\

2、启动namesrv

nohup sh bin/mqnamesrv & 

--查看日志

tail -f ~/logs/rocketmqlogs/namesrv.log\ 

3、启动broker

--指定配置文件

nohup sh bin/mqbroker -c broker-config-a/b/a-s/b-s.properties & 

OR

--指定端口

nohup sh bin/mqbroker -n localhost:9876 & 

tail -f ~/logs/rocketmqlogs/broker.log\ --查看日志

注意:官方的两个类没有指定nameSrv,所以运行可能有问题,可以创建环境变量NAMESRV_ADDR或者放入.bashrc中,亦或直接临时指定

4、机器服务器配置

服务器名nameSrvbroker
serverAnameSrv1
serverBnameSrv2broker-a, broker-b-s
serverCnameSrv3broker-b, broker-a-s

使用serverA,serverB,serverC作为三台nameSrv的集群,同时在serverB和serverC上面分别部署对应的slave备份broker

5、启动rockermq控制台

JAVA -jar rockermq-console-ng-1.0.1.jar &

6、登录8080端口查看控制台

7、可以使用自带的tools.sh工具往mq中测试发送1k条消息

--生产消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

--消费消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer