RocketMQ常见问题总结

如何顺序消息?

全局有序,只能配置一个MQ.局部有序的话,设置顺序消息监听就可以了.若是想要根据如订单生命周期有序消费,让他们路由到同一个MQ就行了.自定义MessageQueueSelector,配置MQ路由规则.
在这里插入图片描述

如何定时消息?

MQ不支持定时,但支持很多种延时定时,MQ为每个延时单独线程处理,处理步骤是定时消息属性存储了消息的原生ID和Topic,然后定时消息恢复成原生消息,然后丢到CommitLog存储.

如何解决重复消费?

分析源码本来以为会根据MSG生成唯一ID,结果这个ID与MSG没得关系.也就是MQ上端没做重复消费的问题.

  • 我们可以在MSG存储一个与MSG绑定的ID,然后这个唯一的ID存储Redis或者DB都可以,当消费者拿到消息后,去存储引擎获取这个ID,查看状态是否重复消费即可.
    在这里插入图片描述

  • 上面的解决办法,需要生产者端,还有一种就是直接丢给消费端处理,消费端直接获取消息唯一ID,去数据库查,若有则说明已经处理了.

  • MQ支持查询.性能不高,不推荐.
    先存唯一ID到key中,然后根据key查找
    在这里插入图片描述

  • 修改RocketMQ源码就行了.比较复杂,还要考虑持久化的问题.不说了.

如何HA?

当broker主服务器内存存的差不多了,则建议从从服务器拉取消息
在这里插入图片描述
默认从主服务器获取消息,若主服务器建议从从服务器获取消息,才会从从服务器获取消息,这里需要注意的是始终是从brokerID=1从服务器读取数据,也就是说部署多台从也没啥用.
在这里插入图片描述

MQ刷入磁盘过程?

MQ若开启了堆内存,会首先将消息写入堆,然后刷入FileChannel.若没开启则采用MMAP方式刷入磁盘.
在这里插入图片描述

关于MMAP,零拷贝参考
关于页缓存以及置换策略参考
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值