上一篇介绍了单个消费者的创建实现,本章介绍多个消费者
一、MultiTopicsConsumerImpl创建入口
public class PulsarClientImpl {
public <T> CompletableFuture<Consumer<T>> subscribeAsync(ConsumerConfigurationData<T> conf, Schema<T> schema, ConsumerInterceptors<T> interceptors) {
// 配置的正则
if (conf.getTopicsPattern() != null) {
return patternTopicSubscribeAsync(conf, schema, interceptors);
}
// 单个消费者
else if (conf.getTopicNames().size() == 1) {
return singleTopicSubscribeAsync(conf, schema, interceptors);
}
// 多个
else {
return multiTopicSubscribeAsync(conf, schema, interceptors);
}
}
}
继续multiTopicSubscribeAsync(...)
public class PulsarClientImpl {
private <T> CompletableFuture<Consumer<T>> multiTopicSubscribeAsync(ConsumerConfigurationData<T> conf, Schema<T> schema, ConsumerInterceptors<T> interceptors) {
CompletableFuture<Consumer<T>> consumerSubscribedFuture = new CompletableFuture<>();
// 创建多消费者实现
ConsumerBase<T> consumer = new MultiTopicsConsumerImpl<>(PulsarClientImpl.this, conf,
externalExecutorProvider, consumerSubscribedFuture, schema, interceptors,
true);
// 添加多消费者
consumers.add(consumer);
return consumerSubscribedFuture;
}
}
PulsarClient维护的是最外层消费者实现,MultiTopicsConsumerImpl内部又有多个则由它自己维护
可以看到,核心实现都在MultiTopicsConsumerImpl构造中。
继续new MultiTopicsConsumerImpl<>(...)
二、MultiTopicsConsumerImpl构造
public class MultiTopicsConsumerImpl<T> extends ConsumerBase<T> {
MultiTopicsConsumerImpl(PulsarClientImpl client, String singleTopic, ConsumerConfigurationData<T> conf,
ExecutorProvider executorProvider, CompletableFuture<Consumer<T>> subscribeFuture, Schema<T> schema,
ConsumerInterceptors<T> interceptors, boolean createTopicIfDoesNotExist, MessageId startMessageId,
long startMessageRollbackDurationInSec) {
// 封装消费者常用的几乎所有api,跟consumerImpl一样
super(client, singleTopic, conf, Math.max

最低0.47元/天 解锁文章
1501





