一 文件过期策略详解
默认情况下,无论是正常消息还是死信队列中的消息。都可能在3天后被清除
参考:RocketMQ文件过期策略详解
二 读写分离注意点
默认不支持读写分离
参考:RocketMQ 主从同步读写分离机制
注意点
- rocketmq只保证
消息至少被消费一次
,所以消费进度如果有问题(也只可能往前退了)
,也只是重复消费.所以我觉得消费进度即使丢失了部分,也问题不大
- 数据如果想保证安全,只能使用
同步刷盘
机制。如果使用异步刷盘+同步复制
策略,当主节点宕机重启后,数据可能会落后于从节点
三 消费组说明
和之前学过的activemq不同。rocketmq里面有许多新概念,因为实现并没有遵循某个协议。
消费组:就是多个消费者的集合。在默认情况下(MessageModel.CLUSTERING)
下,整个组内的消费者共享这个主题下的所有队列(队列里面就是消息,当然也就共享所有消息
)。一个队列只能被一个消费者实例消费,但一个消费者实例可以消费多个队列
所以消费者数量不要多余队列数,否则空闲的几个也发挥不了作用
四 广播模式
广播模式下,一个主题的所有消费者都能受到消息。而且如果广播时如果消费者离线了,之后上线时还是能接收到消息(和activemq的默认效果不一样
)
并且我在本地测试时,总是能从上次消费的offset之后开始继续消费。(因为客户端和server端都有消费组
的消费进度文件)
因为不太熟悉这个模式,个人不是太推荐这种用法。而且两个消费组也能实现一些场景下的广播效果
五 消费进度
broker和consumer都保存
参考:RocketMQ源码分析----Consumer消费进度相关
六 新增消费组时从哪消费
consumer可以调用setConsumeFromWhere
方法设置。
这里也有许多注意点:如何存储队列位置信息
七 顺序消费
我理解的顺序是指消息在时间上的消费顺序。和具体被哪个消费者消费无关
实现参考:如何解决MQ消息消费顺序问题
注意阻塞问题/重复问题