生产过程
消费过程
存储
在RocketMQ中,一个Broker的所有Topic的消息都会被写入到同一个CommitLog文件中。
每个队列(Queue)都有对应的ConsumeQueue文件。
ConsumeQueue每个记录定长,20字节,消息在commitlog中的偏移量,tag,消息大小,
ConsumeQueue是一个轻量级的索引文件,包含指向CommitLog中消息的指针(偏移量offset)、消息长度和消息标签的哈希码等信息。
indexfile:通过消息key快速定位消息的途径
slot table+index linkedList。用key来hash然后放入slot,
consumer从consumerQueue获取offset,然后用offset从commitlog中获取消息。
短轮询
长轮询
长轮询就是consumer的pull后broker不立刻返回,而是挂起,当检测到有消息后(或者超时),返回。
保证broker不会被consumer带节奏。
producer生产消息发送给broker的流程
- Producer 向 NameServer 注册
- NameServer 提供 Broker 信息
- Producer 获取 Broker 地址
Producer 会缓存从 NameServer 获取的路由信息,并且只在必要时更新这些信息
- Producer 与 Broker 建立 TCP 连接