1、消息队列作用:
① 削峰填谷
② 系统解耦
③ 提升性能
④ 蓄流压测
2、RocketMq组件:
① Name Server
② Broker(Master,slave)
③ Producer
④ Consumer
3、Rocketmq如何支持分布式事务消息?
A(存在DB操作)、B(存在DB操作)两方需要保证分布式事务一致性,通过引入中间层MQ,A和MQ保持事务一致性(异常情况下通过MQ反查A接口实现check),B和MQ保证事务一致(通过重试),从而达到最终事务一致性。
原理:大事务 = 小事务 + 异步
4、顺序消息
顺序消息原理:produce在发送消息的时候,把消息发到同一个队列(queue)中,消费者注册消息监听器为MessageListenerOrderly,这样就可以保证消费端只有一个线程去消费消息。
注意:把消息发到同一个队列(queue),不是同一个topic,默认情况下一个topic包括4个queue。
顺序消息缺陷:发送顺序消息无法利用集群Fail Over特性消费顺序消息的并行度依赖于队列数量队列热点问题,个别队列由于哈希不均导致消息过多,消费速度跟不上,产生消息堆积问题遇到消息失败的消息,无法跳过,当前队列消费暂停。
5、RocketMQ最佳实践:
① 一个应用一个Topic,消息子类型用tags标志,设置了tags,消费方在订阅消息时候可以用来做消息过滤;
② Key,每个消息在业务层面的唯一标志
③ 做好日志记录,务必 send result 和key 字段
④ send方法只要不抛出异常就表示成功,但是发送成功会有多个状态,在sendResult里定义。
⑤ RocketMq是至少发送一次,所以在消费端要做好幂等控制;
⑥ 尽量使用批量方式消费消息,提高效率
⑦ 消息过滤,支持在Broker端过滤,优点是减少无用消息传送到consumer,缺点是增加broker逻辑复杂性,也可在consumer端过滤,可由应用系统自定义,缺点是很多无用的消息会传输到consumer,浪费网络带宽。
⑧ 机器硬件故障,rocketMq有同步刷盘、异步刷盘保障数据不丢失或者少量丢失;如果是单点故障,有异步复制恢复数据,但是只能保证99%。RocketMq3.0支持同步双写,保证无单点故障,但是性能下降。
![459a33d17ca0d15ff1f121bc090b4b77.png](https://i-blog.csdnimg.cn/blog_migrate/98fbc19e707430a226d3ae1d4b5ecc7b.jpeg)