上一篇介绍的是消费者客户端的创建,本章解析服务端创建
一、消费者服务端创建入口
由于代码量较多,省略非重点
public class ServerCnx {
protected void handleSubscribe(final CommandSubscribe subscribe) {
// 参数含义客户端消费者构造中都介绍过
final long requestId = subscribe.getRequestId();
final long consumerId = subscribe.getConsumerId();
TopicName topicName = validateTopicName(subscribe.getTopic(), requestId, subscribe);
final String subscriptionName = subscribe.getSubscription();
final SubType subType = subscribe.getSubType();
final String consumerName = subscribe.hasConsumerName() ? subscribe.getConsumerName() : "";
final boolean isDurable = subscribe.isDurable();
final MessageIdImpl startMessageId = subscribe.hasStartMessageId() ? new BatchMessageIdImpl(
subscribe.getStartMessageId().getLedgerId(), subscribe.getStartMessageId().getEntryId(),
subscribe.getStartMessageId().getPartition(), subscribe.getStartMessageId().getBatchIndex())
: null;
final int priorityLevel = subscribe.hasPriorityLevel() ? subscribe.getPriorityLevel() : 0;
final boolean readCompacted = subscribe.hasReadCompacted() && subscribe.isReadCompacted();
final Map<String, String> metadata = CommandUtils.metadataFromCommand(subscribe);
final InitialPosition initialPosition = subscribe.getInitialPosition();
final long startMessageRollbackDurationSec = subscribe.hasStartMessageRollbackDurationSec()
? subscribe.getStartMessageRollbackDurationSec()
: -1;
final SchemaData schema = subscribe.hasSchema() ? getSchema(subscribe.getSchema()) : null;
final boolean isReplicated = subscribe.hasReplicateSubscriptionState()
&& subscribe.isReplicateSubscriptionState();
final boolean forceTopicCreation = subscribe.isForceTopicCreation();
final

本文深入解析Apache Pulsar服务端的消费者订阅创建过程,涉及权限校验、主题和订阅的创建、消费者实例管理以及消息分发机制。重点介绍了持久化订阅的创建,包括ManagedCursor和ManagedLedger在订阅中的作用。内容涵盖消费者服务端入口、订阅创建、权限验证、Topic与Subscription管理等多个关键步骤。
最低0.47元/天 解锁文章
1181

被折叠的 条评论
为什么被折叠?



