RocketMQ——Consumer篇:向Broker同步消费进度的定时任务

来源:互联网 发布:php可以开发app吗 编辑:程序博客网 时间:2024/05/29 13:47

每隔5秒调用一次MQClientInstance.persistAllConsumerOffset()方法将消费进度向Broker同步。遍历MQClientInstance.consumerTable: ConcurrentHashMap<String/*group */, MQConsumerInner>变量。对于PushConsumer端和PullConsumer端,处理逻辑是一样的,以DefaultMQPushConsumerImpl为例,调用DefaultMQPushConsumerImpl.persistConsumerOffset()方法。

1、获取DefaultMQPushConsumerImpl.rebalanceImpl变量的processQueueTable:ConcurrentHashMap<MessageQueue, ProcessQueue>变量值,取该变量的key值集合,即MessageQueue集合;以该集合为参数调用OffsetStore.persistAll(Set<MessageQueue> mqs)方法;

2、若消息模式是广播(BROADCASTING),即DefaultMQPushConsumerImpl.offsetStore变量初始化为LocalFileOffsetStore对象,在此调用LocalFileOffsetStore.persistAll(Set<MessageQueue> mqs)方法,在此方法中遍历LocalFileOffsetStore.offsetTable:ConcurrentHashMap<MessageQueue,AtomicLong>变量,将包含在第1步的MessageQueue集合中的MessageQueue对象的消费进度持久化到consumerOffset.json物理文件中;

3、若消息模式为集群模式,即DefaultMQPushConsumerImpl.offsetStore变量初始化为RemoteBrokerOffsetStore对象,在此调用RemoteBrokerOffsetStore.persistAll(Set<MessageQueue> mqs)方法,在此方法中遍历RemoteBrokerOffsetStore.offsetTable:ConcurrentHashMap <MessageQueue,AtomicLong>变量;对于包含在第1步的MessageQueue集合中的MessageQueue对象,调用updateConsumeOffsetToBroker(MessageQueuemq, long offset)方法向Broker发送UPDATE_CONSUMER_OFFSET请求码的消费进度信息;

阅读全文
0 0
原创粉丝点击