Pulsar源码解析-客户端-多消费者MultiTopicsConsumerImpl创建底层实现

上一篇介绍了单个消费者的创建实现,本章介绍多个消费者

一、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
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值