一、rocketMQ概述
1、rocketmq:分布式消息中间件,支持集群,效率非常高。
2、activityMQ是点对点通讯,发布订阅、 本身不支持集群,不支持分布式。
为什么MQ发生消息堆积,消费者不会宕机?
答:因为MQ中有消息缓存机制。
MQ发生消息堆积,消费者不会宕机,但是消息中间件可能会宕机。
3、rocketmq 海量消息堆积、支持上万个队列。
4、消息中间件集群的目的是什么?
答:解决单台服务器的压力。
5、rocketmq支持消息堆积,重试机制、持久化、顺序消息、事务消息、
支持分布式消息
二、RocketMQ原理
主要流程:
1、生产者和消费者的地址要注册在nameServer中。进行连接。
2、生产者发布消息到 broker中去后,broker会根据nameserver中
注册的地址来进行分发到消费者中去。
多主才是均摊消息存放。
集群:基本每台服务器安装软件都要相同,使用id进行区分。
三、rocketMQ集群搭建
系统环境: centos 64位
1.必须要有jdk环境且jdk必须要64位。1.7版本以上。
2、配置jvm参数
第一步:安装jdk
第二步:添加hosts文件
vi /etc/hosts
192.168.110.187 rocketmq-nameserver1
192.168.110.187 rocketmq-master1
192.168.110.188 rocketmq-nameserver2
192.168.110.188 rocketmq-master2
service network restart
注意: Error:No suitable device found: no device found for connection "System eth0"
解决办法:
(1)ifconfig -a 查看物理 MAC HWADDR 的值
(2)vim 编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0中修改ifconfig中查出的MAC HWADDR值;
上传安装包
# 上传alibaba-rocketmq-3.2.6.tar.gz文件至/usr/local
# tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local
# mv alibaba-rocketmq alibaba-rocketmq-3.2.6
# ln -s alibaba-rocketmq-3.2.6 rocketmq
nameServer 存放的是rocketMQ地址信息
BrokerServer存放的是消息
liunx命令:jps :就是查询当前系统有哪些java应用程序在运行。
四、rocketMQ集群搭建
克隆上一台配置好的rocketMQ的虚拟机环境
修改当前的host文件,
service network restart
注意:
Error:No suitable device found: no device found for connection "System eth0"
解决办法:
(1)ifconfig -a 查看物理 MAC HWADDR 的值
(2)vim 编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0中修改ifconfig中查出的
MAC HWADDR值;
部署一个tomcat 里面放
rocketmq-web-console.war包
五、RocketMQ中的API介绍
代码:报错: 没解决 解决方案可能是版本太低了, 遗留
No route info of this topic, leeue_topic
六、rocketMQ解决幂等问题
RocketMQ消费成功后就不会进行重试了。
消息中间件幂等问题的产生原因?
答:是因为消费者没有及时将消费结果通知给生产者。
生产者没有拿到消费结果,自动重试机制。
解决方案是:使用全局ID ,activityMQ可以使用消息id作为全局ID.
rocketMQ重试时,消息id不一致,是怎么区分全局id的,使用setKey。
message.setKeys();
解决mq重复消费问题,使用日志+全局id进行区分。
每次消费记录保存到redis中,或者mongdb。