Class ConsumerBase<T>

java.lang.Object
org.apache.pulsar.client.impl.ConsumerBase<T>
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.pulsar.client.api.Consumer<T>
Direct Known Subclasses:
ConsumerImpl, MultiTopicsConsumerImpl

public abstract class ConsumerBase<T> extends Object implements org.apache.pulsar.client.api.Consumer<T>
  • Field Details

    • INITIAL_RECEIVER_QUEUE_SIZE

      protected static final int INITIAL_RECEIVER_QUEUE_SIZE
      See Also:
    • MEMORY_THRESHOLD_FOR_RECEIVER_QUEUE_SIZE_EXPANSION

      protected static final double MEMORY_THRESHOLD_FOR_RECEIVER_QUEUE_SIZE_EXPANSION
      See Also:
    • subscription

      protected final String subscription
    • conf

      protected final ConsumerConfigurationData<T> conf
    • consumerName

      protected final String consumerName
    • subscribeFuture

      protected final CompletableFuture<org.apache.pulsar.client.api.Consumer<T>> subscribeFuture
    • listener

      protected final org.apache.pulsar.client.api.MessageListener<T> listener
    • consumerEventListener

      protected final org.apache.pulsar.client.api.ConsumerEventListener consumerEventListener
    • executorProvider

      protected final ExecutorProvider executorProvider
    • externalPinnedExecutor

      protected final ExecutorService externalPinnedExecutor
    • internalPinnedExecutor

      protected final ExecutorService internalPinnedExecutor
    • unAckedChunkedMessageIdSequenceMap

      protected org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap<MessageIdImpl,MessageIdImpl[]> unAckedChunkedMessageIdSequenceMap
    • pendingReceives

      protected final ConcurrentLinkedQueue<CompletableFuture<org.apache.pulsar.client.api.Message<T>>> pendingReceives
    • maxReceiverQueueSize

      protected final int maxReceiverQueueSize
    • CURRENT_RECEIVER_QUEUE_SIZE_UPDATER

      protected static final AtomicIntegerFieldUpdater<ConsumerBase> CURRENT_RECEIVER_QUEUE_SIZE_UPDATER
    • schema

      protected final org.apache.pulsar.client.api.Schema<T> schema
    • interceptors

      protected final ConsumerInterceptors<T> interceptors
    • batchReceivePolicy

      protected final org.apache.pulsar.client.api.BatchReceivePolicy batchReceivePolicy
    • pendingBatchReceives

      protected final ConcurrentLinkedQueue<ConsumerBase.OpBatchReceive<T>> pendingBatchReceives
    • incomingMessagesSize

      protected volatile long incomingMessagesSize
    • batchReceiveTimeout

      protected volatile io.netty.util.Timeout batchReceiveTimeout
    • reentrantLock

      protected final Lock reentrantLock
    • CONSUMER_EPOCH

      protected static final AtomicLongFieldUpdater<ConsumerBase> CONSUMER_EPOCH
    • consumerEpoch

      protected volatile long consumerEpoch
    • scaleReceiverQueueHint

      protected final AtomicBoolean scaleReceiverQueueHint
    • client

      protected final PulsarClientImpl client
    • topic

      protected final String topic
  • Constructor Details

  • Method Details

    • triggerBatchReceiveTimeoutTask

      protected void triggerBatchReceiveTimeoutTask()
    • initReceiverQueueSize

      public void initReceiverQueueSize()
    • minReceiverQueueSize

      public abstract int minReceiverQueueSize()
    • expectMoreIncomingMessages

      protected void expectMoreIncomingMessages()
    • reduceCurrentReceiverQueueSize

      protected void reduceCurrentReceiverQueueSize()
    • receive

      public org.apache.pulsar.client.api.Message<T> receive() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      receive in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • receiveAsync

      public CompletableFuture<org.apache.pulsar.client.api.Message<T>> receiveAsync()
      Specified by:
      receiveAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • internalReceive

      protected abstract org.apache.pulsar.client.api.Message<T> internalReceive() throws org.apache.pulsar.client.api.PulsarClientException
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalReceiveAsync

      protected abstract CompletableFuture<org.apache.pulsar.client.api.Message<T>> internalReceiveAsync()
    • receive

      public org.apache.pulsar.client.api.Message<T> receive(int timeout, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      receive in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalReceive

      protected abstract org.apache.pulsar.client.api.Message<T> internalReceive(long timeout, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • batchReceive

      public org.apache.pulsar.client.api.Messages<T> batchReceive() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      batchReceive in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • batchReceiveAsync

      public CompletableFuture<org.apache.pulsar.client.api.Messages<T>> batchReceiveAsync()
      Specified by:
      batchReceiveAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • hasNextPendingReceive

      protected boolean hasNextPendingReceive()
    • nextPendingReceive

      protected CompletableFuture<org.apache.pulsar.client.api.Message<T>> nextPendingReceive()
    • completePendingReceive

      protected void completePendingReceive(CompletableFuture<org.apache.pulsar.client.api.Message<T>> receivedFuture, org.apache.pulsar.client.api.Message<T> message)
    • failPendingReceive

      protected CompletableFuture<Void> failPendingReceive()
    • internalBatchReceive

      protected abstract org.apache.pulsar.client.api.Messages<T> internalBatchReceive() throws org.apache.pulsar.client.api.PulsarClientException
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalBatchReceiveAsync

      protected abstract CompletableFuture<org.apache.pulsar.client.api.Messages<T>> internalBatchReceiveAsync()
    • acknowledge

      public void acknowledge(org.apache.pulsar.client.api.Message<?> message) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledge in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledge

      public void acknowledge(org.apache.pulsar.client.api.MessageId messageId) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledge in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledge

      public void acknowledge(List<org.apache.pulsar.client.api.MessageId> messageIdList) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledge in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledge

      public void acknowledge(org.apache.pulsar.client.api.Messages<?> messages) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledge in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • reconsumeLater

      public void reconsumeLater(org.apache.pulsar.client.api.Message<?> message, long delayTime, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      reconsumeLater in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • reconsumeLater

      public void reconsumeLater(org.apache.pulsar.client.api.Message<?> message, Map<String,String> customProperties, long delayTime, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      reconsumeLater in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • reconsumeLater

      public void reconsumeLater(org.apache.pulsar.client.api.Messages<?> messages, long delayTime, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      reconsumeLater in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledgeCumulative

      public void acknowledgeCumulative(org.apache.pulsar.client.api.Message<?> message) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledgeCumulative in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledgeCumulative

      public void acknowledgeCumulative(org.apache.pulsar.client.api.MessageId messageId) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      acknowledgeCumulative in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • reconsumeLaterCumulative

      public void reconsumeLaterCumulative(org.apache.pulsar.client.api.Message<?> message, long delayTime, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      reconsumeLaterCumulative in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(org.apache.pulsar.client.api.Message<?> message)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(org.apache.pulsar.client.api.Messages<?> messages)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(org.apache.pulsar.client.api.Messages<?> messages, org.apache.pulsar.client.api.transaction.Transaction txn)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(List<org.apache.pulsar.client.api.MessageId> messageIdList)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(List<org.apache.pulsar.client.api.MessageId> messageIdList, org.apache.pulsar.client.api.transaction.Transaction txn)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • reconsumeLaterAsync

      public CompletableFuture<Void> reconsumeLaterAsync(org.apache.pulsar.client.api.Message<?> message, long delayTime, TimeUnit unit)
      Specified by:
      reconsumeLaterAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • reconsumeLaterAsync

      public CompletableFuture<Void> reconsumeLaterAsync(org.apache.pulsar.client.api.Message<?> message, Map<String,String> customProperties, long delayTime, TimeUnit unit)
      Specified by:
      reconsumeLaterAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • reconsumeLaterAsync

      public CompletableFuture<Void> reconsumeLaterAsync(org.apache.pulsar.client.api.Messages<?> messages, long delayTime, TimeUnit unit)
      Specified by:
      reconsumeLaterAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeCumulativeAsync

      public CompletableFuture<Void> acknowledgeCumulativeAsync(org.apache.pulsar.client.api.Message<?> message)
      Specified by:
      acknowledgeCumulativeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • reconsumeLaterCumulativeAsync

      public CompletableFuture<Void> reconsumeLaterCumulativeAsync(org.apache.pulsar.client.api.Message<?> message, long delayTime, TimeUnit unit)
      Specified by:
      reconsumeLaterCumulativeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • reconsumeLaterCumulativeAsync

      public CompletableFuture<Void> reconsumeLaterCumulativeAsync(org.apache.pulsar.client.api.Message<?> message, Map<String,String> customProperties, long delayTime, TimeUnit unit)
      Specified by:
      reconsumeLaterCumulativeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(org.apache.pulsar.client.api.MessageId messageId)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeAsync

      public CompletableFuture<Void> acknowledgeAsync(org.apache.pulsar.client.api.MessageId messageId, org.apache.pulsar.client.api.transaction.Transaction txn)
      Specified by:
      acknowledgeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeCumulativeAsync

      public CompletableFuture<Void> acknowledgeCumulativeAsync(org.apache.pulsar.client.api.MessageId messageId)
      Specified by:
      acknowledgeCumulativeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • acknowledgeCumulativeAsync

      public CompletableFuture<Void> acknowledgeCumulativeAsync(org.apache.pulsar.client.api.MessageId messageId, org.apache.pulsar.client.api.transaction.Transaction txn)
      Specified by:
      acknowledgeCumulativeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • negativeAcknowledge

      public void negativeAcknowledge(org.apache.pulsar.client.api.Message<?> message)
      Specified by:
      negativeAcknowledge in interface org.apache.pulsar.client.api.Consumer<T>
    • doAcknowledgeWithTxn

      protected CompletableFuture<Void> doAcknowledgeWithTxn(List<org.apache.pulsar.client.api.MessageId> messageIdList, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, Map<String,Long> properties, TransactionImpl txn)
    • doAcknowledgeWithTxn

      protected CompletableFuture<Void> doAcknowledgeWithTxn(org.apache.pulsar.client.api.MessageId messageId, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, Map<String,Long> properties, TransactionImpl txn)
    • doAcknowledge

      protected abstract CompletableFuture<Void> doAcknowledge(org.apache.pulsar.client.api.MessageId messageId, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, Map<String,Long> properties, TransactionImpl txn)
    • doAcknowledge

      protected abstract CompletableFuture<Void> doAcknowledge(List<org.apache.pulsar.client.api.MessageId> messageIdList, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, Map<String,Long> properties, TransactionImpl txn)
    • doReconsumeLater

      protected abstract CompletableFuture<Void> doReconsumeLater(org.apache.pulsar.client.api.Message<?> message, org.apache.pulsar.common.api.proto.CommandAck.AckType ackType, Map<String,String> customProperties, long delayTime, TimeUnit unit)
    • negativeAcknowledge

      public void negativeAcknowledge(org.apache.pulsar.client.api.Messages<?> messages)
      Specified by:
      negativeAcknowledge in interface org.apache.pulsar.client.api.Consumer<T>
    • unsubscribe

      public void unsubscribe() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      unsubscribe in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • unsubscribeAsync

      public abstract CompletableFuture<Void> unsubscribeAsync()
      Specified by:
      unsubscribeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • close

      public void close() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • closeAsync

      public abstract CompletableFuture<Void> closeAsync()
      Specified by:
      closeAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • getLastMessageId

      public org.apache.pulsar.client.api.MessageId getLastMessageId() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      getLastMessageId in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • getLastMessageIdAsync

      public abstract CompletableFuture<org.apache.pulsar.client.api.MessageId> getLastMessageIdAsync()
      Specified by:
      getLastMessageIdAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • getSubType

      protected org.apache.pulsar.common.api.proto.CommandSubscribe.SubType getSubType()
    • getAvailablePermits

      public abstract int getAvailablePermits()
    • numMessagesInQueue

      public abstract int numMessagesInQueue()
    • subscribeFuture

      public CompletableFuture<org.apache.pulsar.client.api.Consumer<T>> subscribeFuture()
    • getTopic

      public String getTopic()
      Specified by:
      getTopic in interface org.apache.pulsar.client.api.Consumer<T>
    • getSubscription

      public String getSubscription()
      Specified by:
      getSubscription in interface org.apache.pulsar.client.api.Consumer<T>
    • getConsumerName

      public String getConsumerName()
      Specified by:
      getConsumerName in interface org.apache.pulsar.client.api.Consumer<T>
    • redeliverUnacknowledgedMessages

      protected abstract void redeliverUnacknowledgedMessages(Set<org.apache.pulsar.client.api.MessageId> messageIds)
      Redelivers the given unacknowledged messages. In Failover mode, the request is ignored if the consumer is not active for the given topic. In Shared mode, the consumers messages to be redelivered are distributed across all the connected consumers. This is a non blocking call and doesn't throw an exception. In case the connection breaks, the messages are redelivered after reconnect.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • beforeConsume

      protected org.apache.pulsar.client.api.Message<T> beforeConsume(org.apache.pulsar.client.api.Message<T> message)
    • onAcknowledge

      protected void onAcknowledge(org.apache.pulsar.client.api.MessageId messageId, Throwable exception)
    • onAcknowledge

      protected void onAcknowledge(List<org.apache.pulsar.client.api.MessageId> messageIds, Throwable exception)
    • onAcknowledgeCumulative

      protected void onAcknowledgeCumulative(org.apache.pulsar.client.api.MessageId messageId, Throwable exception)
    • onAcknowledgeCumulative

      protected void onAcknowledgeCumulative(List<org.apache.pulsar.client.api.MessageId> messageIds, Throwable exception)
    • onNegativeAcksSend

      protected void onNegativeAcksSend(Set<org.apache.pulsar.client.api.MessageId> messageIds)
    • onAckTimeoutSend

      protected void onAckTimeoutSend(Set<org.apache.pulsar.client.api.MessageId> messageIds)
    • onPartitionsChange

      protected void onPartitionsChange(String topicName, int partitions)
    • canEnqueueMessage

      protected boolean canEnqueueMessage(org.apache.pulsar.client.api.Message<T> message)
    • enqueueMessageAndCheckBatchReceive

      protected boolean enqueueMessageAndCheckBatchReceive(org.apache.pulsar.client.api.Message<T> message)
    • updateAutoScaleReceiverQueueHint

      protected abstract void updateAutoScaleReceiverQueueHint()
    • hasEnoughMessagesForBatchReceive

      protected boolean hasEnoughMessagesForBatchReceive()
    • notifyPendingBatchReceivedCallBack

      protected void notifyPendingBatchReceivedCallBack()
    • notifyPendingBatchReceivedCallBack

      protected final void notifyPendingBatchReceivedCallBack(ConsumerBase.OpBatchReceive<T> opBatchReceive)
    • completePendingBatchReceive

      protected void completePendingBatchReceive(CompletableFuture<org.apache.pulsar.client.api.Messages<T>> future, org.apache.pulsar.client.api.Messages<T> messages)
    • messageProcessed

      protected abstract void messageProcessed(org.apache.pulsar.client.api.Message<?> msg)
    • tryTriggerListener

      protected void tryTriggerListener()
    • callMessageListener

      protected void callMessageListener(org.apache.pulsar.client.api.Message<T> msg)
    • peekMessageKey

      protected byte[] peekMessageKey(org.apache.pulsar.client.api.Message<T> msg)
    • getNewMessagesImpl

      protected MessagesImpl<T> getNewMessagesImpl()
    • hasPendingBatchReceive

      protected boolean hasPendingBatchReceive()
    • resetIncomingMessageSize

      protected void resetIncomingMessageSize()
    • decreaseIncomingMessageSize

      protected void decreaseIncomingMessageSize(org.apache.pulsar.client.api.Message<?> message)
    • getIncomingMessageSize

      public long getIncomingMessageSize()
    • getTotalIncomingMessages

      public int getTotalIncomingMessages()
    • clearIncomingMessages

      protected void clearIncomingMessages()
    • setCurrentReceiverQueueSize

      protected abstract void setCurrentReceiverQueueSize(int newSize)
      Update the size of the consumer receive queue. See ConsumerBuilder.receiverQueueSize(int).
      Parameters:
      newSize - new size of the receiver queue.
    • getCurrentReceiverQueueSize

      public int getCurrentReceiverQueueSize()
    • completeOpBatchReceive

      protected abstract void completeOpBatchReceive(ConsumerBase.OpBatchReceive<T> op)
    • isValidConsumerEpoch

      protected boolean isValidConsumerEpoch(MessageImpl<T> message)
    • hasBatchReceiveTimeout

      public boolean hasBatchReceiveTimeout()
    • changeToReadyState

      protected boolean changeToReadyState()
    • changeToRegisteringSchemaState

      protected boolean changeToRegisteringSchemaState()
    • getState

      protected org.apache.pulsar.client.impl.HandlerState.State getState()
    • changeToConnecting

      protected boolean changeToConnecting()
    • setState

      protected void setState(org.apache.pulsar.client.impl.HandlerState.State s)
    • getAndUpdateState

      protected org.apache.pulsar.client.impl.HandlerState.State getAndUpdateState(UnaryOperator<org.apache.pulsar.client.impl.HandlerState.State> updater)
    • getClient

      public PulsarClientImpl getClient()