RocketMq消费者拉取消息服务PullMessageService
RocketMq消费者拉取消息服务PullMessageService
@Override
public void run() {
log.info(this.getServiceName() + " service started");
while (!this.isStopped()) {
try {
//从请求队列里获取一个请求
PullRequest pullRequest = this.pullRequestQueue.take();
if (pullRequest != null) {
//拉取数据
this.pullMessage(pullRequest);
}
} catch (InterruptedException e) {
} catch (Exception e) {
log.error("Pull Message Service Run Method exception", e);
}
}
log.info(this.getServiceName() + " service end");
}
PullMessageService#pullMessage
private void pullMessage(final PullRequest pullRequest) {
//根据组名获取对应的消费者 一个mqClientInstance里一个consumerGroup只有一个消费者对应
final MQConsumerInner consumer = this.mQClientFactory.selectConsumer(pullRequest.getConsumerGroup());
if (consumer != null) {
DefaultMQPushConsumerImpl impl = (DefaultMQPushConsumerImpl) consumer;
//实际是根据组名获取对应的消费者来发起消息拉取
impl.pullMessage(pullRequest);
} else {
log.warn("No matched consumer for the PullRequest {}, drop it", pullRequest);
}
}
DefaultMQPushConsumerImpl#pullMessage