1.rocketmq架构设计
rocketmq由消费者,生产者,broker,nameserver,broker由topic构成,topic由queue组成,
2.rocketmq持久化设计
基于文件系统实现,由commitlog,consumerQueue,indexFile构成,commitlog包含所有消息中的数据,拆分成固定大小的文件,consumerQueue是commitlog基于topic的索引文件,indexfile是基于时间区分或者key的索引
3.rocketmq实现消息顺序到达
要求发送消息就是有顺序的,通过selector来选择单一队列来接受消息,不然无法实现,消费者需要单一消费者消费,可以通过加锁实现,或者单线程(不推荐)
4.如何保证不丢失消息
生产者:需要使用发送阻塞的模式,如果发现消息失败可以快速重试
开启ack机制,当出现保存失败的时候,需要返回失败值
使用异步发送需要用回调函数得到结果
单机使用同步刷盘,当数据写完之后直接刷盘,集群模式需要等所有的slave节点复制完成之后再返回ack
消费者要保证offset手动提交,确定数据获取成功
5.事务消息设计原理
当发送事务消息时会发送消息到一个专门的事务队列中,如果commit了就然后再发送到目标队列中,如果时rollback就直接删除消息,普通队列再发送给消费者,,如果commit或者rollback失败了向程序进行本地事务检查(回调函数),如果成功提交事务,失败回滚