Class ConsumerImpl<T>

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

public class ConsumerImpl<T> extends ConsumerBase<T>
  • Field Details

    • lastDequeuedMessageId

      protected volatile org.apache.pulsar.client.api.MessageId lastDequeuedMessageId
    • stats

      protected final ConsumerStatsRecorder stats
    • paused

      protected volatile boolean paused
    • chunkedMessagesMap

      protected org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap<String,org.apache.pulsar.client.impl.ConsumerImpl.ChunkedMessageCtx> chunkedMessagesMap
    • expireTimeOfIncompleteChunkedMessageMillis

      protected long expireTimeOfIncompleteChunkedMessageMillis
    • client

      protected final PulsarClientImpl client
    • topic

      protected final String topic
  • Constructor Details

    • ConsumerImpl

      protected ConsumerImpl(PulsarClientImpl client, String topic, ConsumerConfigurationData<T> conf, ExecutorProvider executorProvider, int partitionIndex, boolean hasParentConsumer, boolean parentConsumerHasListener, CompletableFuture<org.apache.pulsar.client.api.Consumer<T>> subscribeFuture, org.apache.pulsar.client.api.MessageId startMessageId, long startMessageRollbackDurationInSec, org.apache.pulsar.client.api.Schema<T> schema, ConsumerInterceptors<T> interceptors, boolean createTopicIfDoesNotExist)
  • Method Details

    • getConnectionHandler

      public ConnectionHandler getConnectionHandler()
    • getUnAckedMessageTracker

      public UnAckedMessageTracker getUnAckedMessageTracker()
    • unsubscribeAsync

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

      public int minReceiverQueueSize()
      Specified by:
      minReceiverQueueSize in class ConsumerBase<T>
    • internalReceive

      protected org.apache.pulsar.client.api.Message<T> internalReceive() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      internalReceive in class ConsumerBase<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalReceiveAsync

      protected CompletableFuture<org.apache.pulsar.client.api.Message<T>> internalReceiveAsync()
      Specified by:
      internalReceiveAsync in class ConsumerBase<T>
    • internalReceive

      protected org.apache.pulsar.client.api.Message<T> internalReceive(long timeout, TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      internalReceive in class ConsumerBase<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalBatchReceive

      protected org.apache.pulsar.client.api.Messages<T> internalBatchReceive() throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      internalBatchReceive in class ConsumerBase<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • internalBatchReceiveAsync

      protected CompletableFuture<org.apache.pulsar.client.api.Messages<T>> internalBatchReceiveAsync()
      Specified by:
      internalBatchReceiveAsync in class ConsumerBase<T>
    • doAcknowledge

      protected 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)
      Specified by:
      doAcknowledge in class ConsumerBase<T>
    • doAcknowledge

      protected 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)
      Specified by:
      doAcknowledge in class ConsumerBase<T>
    • doReconsumeLater

      protected 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)
      Specified by:
      doReconsumeLater in class ConsumerBase<T>
    • negativeAcknowledge

      public void negativeAcknowledge(org.apache.pulsar.client.api.MessageId messageId)
      Specified by:
      negativeAcknowledge 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>
      Overrides:
      negativeAcknowledge in class ConsumerBase<T>
    • connectionOpened

      public void connectionOpened(ClientCnx cnx)
    • consumerIsReconnectedToBroker

      protected void consumerIsReconnectedToBroker(ClientCnx cnx, int currentQueueSize)
    • connectionFailed

      public void connectionFailed(org.apache.pulsar.client.api.PulsarClientException exception)
    • closeAsync

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

      protected boolean isBatch(org.apache.pulsar.common.api.proto.MessageMetadata messageMetadata)
    • newSingleMessage

      protected <V> MessageImpl<V> newSingleMessage(int index, int numMessages, org.apache.pulsar.common.api.proto.BrokerEntryMetadata brokerEntryMetadata, org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata, org.apache.pulsar.common.api.proto.SingleMessageMetadata singleMessageMetadata, io.netty.buffer.ByteBuf payload, MessageIdImpl messageId, org.apache.pulsar.client.api.Schema<V> schema, boolean containMetadata, org.apache.pulsar.common.util.collections.BitSetRecyclable ackBitSet, BatchMessageAcker acker, int redeliveryCount, long consumerEpoch)
    • newMessage

      protected <V> MessageImpl<V> newMessage(MessageIdImpl messageId, org.apache.pulsar.common.api.proto.BrokerEntryMetadata brokerEntryMetadata, org.apache.pulsar.common.api.proto.MessageMetadata messageMetadata, io.netty.buffer.ByteBuf payload, org.apache.pulsar.client.api.Schema<V> schema, int redeliveryCount, long consumerEpoch)
    • messageProcessed

      protected void messageProcessed(org.apache.pulsar.client.api.Message<?> msg)
      Record the event that one message has been processed by the application. Periodically, it sends a Flow command to notify the broker that it can push more messages
      Specified by:
      messageProcessed in class ConsumerBase<T>
    • trackMessage

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

      protected void trackMessage(org.apache.pulsar.client.api.MessageId messageId)
    • trackMessage

      protected void trackMessage(org.apache.pulsar.client.api.MessageId messageId, int redeliveryCount)
    • increaseAvailablePermits

      protected void increaseAvailablePermits(ClientCnx currentCnx, int delta)
    • increaseAvailablePermits

      public void increaseAvailablePermits(int delta)
    • setCurrentReceiverQueueSize

      protected void setCurrentReceiverQueueSize(int newSize)
      Description copied from class: ConsumerBase
      Update the size of the consumer receive queue. See ConsumerBuilder.receiverQueueSize(int).
      Specified by:
      setCurrentReceiverQueueSize in class ConsumerBase<T>
      Parameters:
      newSize - new size of the receiver queue.
    • pause

      public void pause()
      Specified by:
      pause in interface org.apache.pulsar.client.api.Consumer<T>
    • resume

      public void resume()
      Specified by:
      resume in interface org.apache.pulsar.client.api.Consumer<T>
    • getLastDisconnectedTimestamp

      public long getLastDisconnectedTimestamp()
      Specified by:
      getLastDisconnectedTimestamp in interface org.apache.pulsar.client.api.Consumer<T>
    • isConnected

      public boolean isConnected()
      Specified by:
      isConnected in interface org.apache.pulsar.client.api.Consumer<T>
    • isConnected

      public boolean isConnected(ClientCnx cnx)
    • getAvailablePermits

      public int getAvailablePermits()
      Specified by:
      getAvailablePermits in class ConsumerBase<T>
    • numMessagesInQueue

      public int numMessagesInQueue()
      Specified by:
      numMessagesInQueue in class ConsumerBase<T>
    • redeliverUnacknowledgedMessages

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

      public int clearIncomingMessagesAndGetMessageNumber()
    • redeliverUnacknowledgedMessages

      public void redeliverUnacknowledgedMessages(Set<org.apache.pulsar.client.api.MessageId> messageIds)
      Description copied from class: ConsumerBase
      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.
      Specified by:
      redeliverUnacknowledgedMessages in class ConsumerBase<T>
    • updateAutoScaleReceiverQueueHint

      protected void updateAutoScaleReceiverQueueHint()
      Specified by:
      updateAutoScaleReceiverQueueHint in class ConsumerBase<T>
    • completeOpBatchReceive

      protected void completeOpBatchReceive(ConsumerBase.OpBatchReceive<T> op)
      Specified by:
      completeOpBatchReceive in class ConsumerBase<T>
    • seek

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

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

      public void seek(Function<String,Object> function) throws org.apache.pulsar.client.api.PulsarClientException
      Specified by:
      seek in interface org.apache.pulsar.client.api.Consumer<T>
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • seekAsync

      public CompletableFuture<Void> seekAsync(Function<String,Object> function)
      Specified by:
      seekAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • seekAsync

      public CompletableFuture<Void> seekAsync(long timestamp)
      Specified by:
      seekAsync in interface org.apache.pulsar.client.api.Consumer<T>
    • seekAsync

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

      public boolean hasMessageAvailable() throws org.apache.pulsar.client.api.PulsarClientException
      Throws:
      org.apache.pulsar.client.api.PulsarClientException
    • hasMessageAvailableAsync

      public CompletableFuture<Boolean> hasMessageAvailableAsync()
    • getLastMessageIdAsync

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

      public CompletableFuture<org.apache.pulsar.client.impl.ConsumerImpl.GetLastMessageIdResponse> internalGetLastMessageIdAsync()
    • getStats

      public ConsumerStatsRecorder getStats()
      Specified by:
      getStats in interface org.apache.pulsar.client.api.Consumer<T>
    • hasReachedEndOfTopic

      public boolean hasReachedEndOfTopic()
      Specified by:
      hasReachedEndOfTopic in interface org.apache.pulsar.client.api.Consumer<T>
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • getClientCnx

      public ClientCnx getClientCnx()
    • getTopicNameWithoutPartition

      public String getTopicNameWithoutPartition()
    • removeExpireIncompleteChunkedMessages

      protected void removeExpireIncompleteChunkedMessages()
    • getPossibleSendToDeadLetterTopicMessages

      public Map<MessageIdImpl,List<MessageImpl<T>>> getPossibleSendToDeadLetterTopicMessages()
    • 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()