2025.4.24 rocketMQ学习
2025.4.24 rocketMQ学习
1.消息队列的两种基础模式:
队列模式:就一个队列,消费者们竞争消费,消费完的消息就丢掉,没有实现重复消费的功能,且消费者们竞争对性能影响比较大。
发布-订阅模式:producer-topic-队列-consumer组-consumer
这样设计,producer往特定topic发送的消息分发到其内的不同队列上,订阅了这个topic的consumer组中,每个consumer去拉取一个或多个队列里的消息消费,这样设计非常灵活,比如说希望加快消息生产与消费的速度,提高并发量,可以直接加队列,然后加消费者,非常方便。
用topic-消费组-队列来记录消费消息的位置,这样就解决了无法重复消费的问题
如上,每个消费者对其订阅的topic中的每个队列都维护一个位置,记录当前消费到哪里了。
2.消息的存储
先存在commitlog里,这样顺序写顺序读,速度很快,然后启一个定时任务,把commitlog里面的数据写到consume-queue中,注意这里面存的是commitlog中的起始位置和偏移量,减少了存储的消耗。
3.事务消息
可以用来实现分布式事务,其他的实现方法有两阶段提交,三阶段提交,TCC等
事务消息是开启事务时先发一个半消息,然后等事务执行完了之后,决定是回滚还是确认,再发一个确认消息。如果消费者那边长时间没有收到确认消息,也可以主动询问。
4.消息堆积问题
瞬时流量很大的场景:消息队列本身就有削峰填谷的功能,如果瞬时流量在几十分钟内可以消费掉,那就存在broker中等消费者慢慢消费就行,如果消息实在太多,可以从生产者上做限制,限制生产消息的速度。
消费性能问题:这里可以具体情况具体分析,比如不要在循环里进行数据库连接,优化成批量操作,以及通过缓存查询一些参数等等。
机器不够:粗暴一点加队列,加消费者。

浙公网安备 33010602011771号