消息队列RocketMQ如何存储消息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列RocketMQ如何存储消息相关的知识,希望对你有一定的参考价值。
Rocket的消息是有consume queue和commit log组成。
Consume Queue
Consume queue是消息的逻辑队列,相当于字典目录,用来指定消息在物理文件(commit log)上的位置,我们可以在配置中指定consumequeue和commitlog存储的目录。每一个topic下的每个queue都有一个对应的consumqueue文件。
根据topic和queueid来组织文件,topicA中有2个队列(0和1),那么topicA和queueID=0就组成一个consume queue,另外topicA和queueID=1就组成另外一个consume queue
按照消费端的GroupNanme来分组重试队列,如果消费端消费失败,消息将被发往重试队列,图中的%RETRY%ConsumerGroupA
按照消费端的GroupName来分组死信队列,如果消费端消费失败,并重试指定次数后,仍然失败,则发往死信队列(用于存放无法传递的消息),图中的%DLQ%ConsumerGroupA
Consume queue中的存储单元是20字节长度的二进制数据,顺序读写
commitLog Offset,这条消息在commit log中的实际偏移量
size存储的是这条消息的大小
message tag hashcode,是存储这个消息的TAG的哈希值,用于订阅时消息过滤
Commit Log
消息存放的物理文件,每台broker上的commit log被本机所有的queue共享不做任何区分。消息存储内容长度不固定,文件顺序写,随机读。
以上是关于消息队列RocketMQ如何存储消息的主要内容,如果未能解决你的问题,请参考以下文章
各种消息队列如何选择?为何选择rocketmq来保证消息不丢失,及应该采用rocketmq哪种通信模式?
各种消息队列如何选择?为何选择rocketmq来保证消息不丢失,及应该采用rocketmq哪种通信模式?