一.RocketMQ的概念讲解:
1.Topic:消息主题,一级消息类型,生产者向其发送消息.(可以简单定义为开发,测试,生产,也可以区分完全不相关的公司业务方向)
2.生产者:也称为消息发布者,负责生产并发送消息至Topic.
3.消费者:也称为消息订阅者,负责从Topic接收并消费消息(消费者可以精确匹配到具体接受某一个tag的信息)。
4.消息:生产者向Topic发送并最终传送给消费者的数据和(可选)属性的组合。
5.消息属性:生产者可以为消息定义的属性,包含Message Key(消息的唯一标识)和Tag(哪一类型的消息,可以具体到某个业务的场景)。
6.Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致(实际使用中可以一个微服务定义一个group)。
7.集群消费:消息队列RocketMQ版认为任意一条消息只需要被消费者集群内的任意一个消费者处理即可;
8.广播消费:消息队列RocketMQ版会将每条消息推送给消费者集群内所有注册过的消费者,保证消息至少被每台机器消费一次。
二.MQ的作用:
1.削峰填谷
诸如秒杀、抢红包、企业开门红等大型活动时皆会带来较高的流量脉冲,或因没做相应的保护而导致系统超负荷甚至崩溃,或因限制太过导致请求大量失败而影响用户体验,消息队列RocketMQ版可提供削峰填谷的服务来解决该问题。
2.异步解耦
比如下订单完成之后,可能需要做很多其他相应事件,比如通知用户下单成功,做统计等等.
3.顺序收发
交易系统中的订单创建、支付、退款等流程.与先进先出FIFO原理类似,
4.分布式事务一致性
交易,扣减用户余额,可以用mq发送事务消息
三.RocketMQ的功能:
1.支持顺序发送消息
2.支持事务消息
3.支持批量发送消息: 把消息打包成MessageBatch对象,一起发送给服务端
4.支持消息发送重试机制和消费重试机制,当消费失败的时候,只要没确认收到消息,服务端会有间隔时间推送的
5.支持异步发送消息
6.支持延时发送消息
7.同步刷盘:在消息到达MQ后,RocketMQ需要将数据持久化,同步刷盘是指数据到达内存之后,必须刷到commitlog日志之后才算成功,然后返回producer数据已经发送成功。
8.异步刷盘:,同步刷盘是指数据到达内存之后,返回producer说数据已经发送成功。然后再写入commitlog日志。
9.异步复制: 在主从节点中,发送一条消息到主节点之后,这样消息就算从producer端发送成功了,然后通过异步复制的方法将数据复制到从节点,如果主节点挂掉,会丢失少量消息
10.同步双写:在主从节点中,我们发送一条消息到主节点之后,这样消息就并不算从producer端发送成功了,需要通过同步双写的方法将数据同步到从节点后, 才算数据发送成功。节点挂掉,不会丢失消息
四.RokcetMQ集群:
Producer集群就是生产者集群(他们在同一个生产者组 Producer Group)
Consumer集群就是消费者集群(他们在同一个消费者组 Consumer Group)
NameServer集群作为超轻量级的配置中心,只做集群元数据存储和心跳工作,不必保障节点间数据强一致性,也就是说NameServer集群是一个多机热备的概念。
对于Broker而言,通常Master与Slave为一组服务,他们互为主从节点,通过NameServer与外部的Client端暴露统一的集群入口。Broker就是消息存储的核心MQ服务了, master和slave可以多对多,一对多
NameServer在RocketMQ中所扮演的角色:
1.NameServer 用来保存活跃的 broker 列表,包括 Master 和 Slave 。
2.NameServer 用来保存所有 topic 和该 topic 所有队列的列表。
3.NameServer 用来保存所有 broker 的 Filter 列表
RocketMQ的三种自带集群模式为:
(1)双MASTER : 优点是配置简单、快捷,但是一旦MASTER机器宕机或出现问题就无法提供服务;
(2)双MASTER双SLAVE同步双写: 比异步复制的性能差10%,但能保证数据不丢失;
(3)双MASTER双SLAVE 异步复制:性能最好,但是遇到突发情况会有少量数据丢失
五.MQ问题:
rocketmq会重复投递,但是自己要做消息幂等性