简单了解RocketMQ

作用

异步:和同步相对,无需等待某些行为,可以直接继续往下执行

削峰限流:降低瞬时流量,避免系统宕机

解耦:解除业务上下游的耦合

和其它消息队列的对比

image-20240128224215013

架构

image-20240128224926828

消费模式

push模式:队列强制推送,实时性强,但是可能对消费端压力大

pull模式:消费者主动拉取,RocketMQ默认实现

生产者轮询发,消费者轮询取,并且消费者可以选择单线程(一个线程对应一个队列)或者多线程

消息类型

同步消息:生产者需要等待消息队列确认,适用于需要消息可靠性的

异步消息:生产者无需等待消息队列确认,只需要有个回调来确认消息是否收到,适用于需要响应快的

单向消息:生产者无需消息队列确认,消息可能丢失,适用于写日志(消费者接收msg写ES)

延时消息:消息到时间了才会被投递到消息队列,适用于延时取消订单

批量消息:很多消息被同时发送到同一个队列

顺序消息:消息被放到同一个队列里面(生产顺序),消息被单线程消费(消费顺序),单线程消费失败会无限次重试,多线程最多16次,超过16次放到死信队列

消息问题

消息区分

消息可通过 tag 或者 topic 进行区分,考虑业务类型以及业务体量,不同业务类型建议分成不同的topic,业务体量差异大建议分成不同的topic

消息重复

原因

  1. 生产者重复投递
  2. 消费者因为扩容重复消费,由于消费者端扩容采用负载均衡的机制,没有被确认的消息会被投递给新分配到的消费者

解决方案

消息自带的 msgid 或者 自定义key 来在消费者去重,做幂等性处理

消息重试

单线程消费失败会无限次重试,多线程最多16次,超过16次放到死信队列

%DSL% +topic名称 就是死信队列topic的名字,在死信队列我们一般不进行业务处理,选则把错误写入文件、邮箱短信通知人工处理

消息堆积

生产者和消费者的速率不均衡

解决方案

生产者:减少消息的发送,限流策略限制过多请求(请求频繁,请稍后重试)

消费者:增加消费者组内的消费者数量(但是不能超过队列数量),增大线程数(I/O 密集型 2N、CPU 密集型 N + 1)

消息丢失

消息持久化失败

同步刷盘:磁盘损坏

异步刷盘:buffer 内的脏消息断电后丢失

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值