Class ConsumerImpl<T>

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, org.apache.pulsar.client.api.Consumer<T>
    Direct Known Subclasses:
    ZeroQueueConsumerImpl

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

      • lastDequeuedMessageId

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

        protected volatile boolean paused
      • chunkedMessagesMap

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

        protected long expireTimeOfIncompleteChunkedMessageMillis
      • topic

        protected final java.lang.String topic
    • Constructor Detail

      • ConsumerImpl

        protected ConsumerImpl​(PulsarClientImpl client,
                               java.lang.String topic,
                               ConsumerConfigurationData<T> conf,
                               ExecutorProvider executorProvider,
                               int partitionIndex,
                               boolean hasParentConsumer,
                               boolean parentConsumerHasListener,
                               java.util.concurrent.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 Detail

      • unsubscribeAsync

        public java.util.concurrent.CompletableFuture<java.lang.Void> unsubscribeAsync()
        Specified by:
        unsubscribeAsync in interface org.apache.pulsar.client.api.Consumer<T>
        Specified by:
        unsubscribeAsync 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 java.util.concurrent.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​(int timeout,
                                                                          java.util.concurrent.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 java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.Messages<T>> internalBatchReceiveAsync()
        Specified by:
        internalBatchReceiveAsync in class ConsumerBase<T>
      • doAcknowledge

        protected java.util.concurrent.CompletableFuture<java.lang.Void> doAcknowledge​(org.apache.pulsar.client.api.MessageId messageId,
                                                                                       org.apache.pulsar.common.api.proto.CommandAck.AckType ackType,
                                                                                       java.util.Map<java.lang.String,​java.lang.Long> properties,
                                                                                       TransactionImpl txn)
        Specified by:
        doAcknowledge in class ConsumerBase<T>
      • doAcknowledge

        protected java.util.concurrent.CompletableFuture<java.lang.Void> doAcknowledge​(java.util.List<org.apache.pulsar.client.api.MessageId> messageIdList,
                                                                                       org.apache.pulsar.common.api.proto.CommandAck.AckType ackType,
                                                                                       java.util.Map<java.lang.String,​java.lang.Long> properties,
                                                                                       TransactionImpl txn)
        Specified by:
        doAcknowledge in class ConsumerBase<T>
      • doReconsumeLater

        protected java.util.concurrent.CompletableFuture<java.lang.Void> doReconsumeLater​(org.apache.pulsar.client.api.Message<?> message,
                                                                                          org.apache.pulsar.common.api.proto.CommandAck.AckType ackType,
                                                                                          java.util.Map<java.lang.String,​java.lang.Long> properties,
                                                                                          long delayTime,
                                                                                          java.util.concurrent.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>
      • 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 java.util.concurrent.CompletableFuture<java.lang.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 <U> MessageImpl<U> 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<U> schema,
                                                      boolean containMetadata,
                                                      org.apache.pulsar.common.util.collections.BitSetRecyclable ackBitSet,
                                                      BatchMessageAcker acker,
                                                      int redeliveryCount)
      • newMessage

        protected <U> MessageImpl<U> 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<U> schema,
                                                int redeliveryCount)
      • 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)
      • increaseAvailablePermits

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

        public void increaseAvailablePermits​(int delta)
      • 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>
      • redeliverUnacknowledgedMessages

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

        public int clearIncomingMessagesAndGetMessageNumber()
      • redeliverUnacknowledgedMessages

        public void redeliverUnacknowledgedMessages​(java.util.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>
      • 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​(java.util.function.Function<java.lang.String,​java.lang.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 java.util.concurrent.CompletableFuture<java.lang.Void> seekAsync​(java.util.function.Function<java.lang.String,​java.lang.Object> function)
        Specified by:
        seekAsync in interface org.apache.pulsar.client.api.Consumer<T>
      • seekAsync

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

        public java.util.concurrent.CompletableFuture<java.lang.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 java.util.concurrent.CompletableFuture<java.lang.Boolean> hasMessageAvailableAsync()
      • getLastMessageIdAsync

        public java.util.concurrent.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 java.util.concurrent.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 java.lang.Object
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • getClientCnx

        public ClientCnx getClientCnx()
      • getTopicNameWithoutPartition

        public java.lang.String getTopicNameWithoutPartition()
      • removeExpireIncompleteChunkedMessages

        protected void removeExpireIncompleteChunkedMessages()
      • getPossibleSendToDeadLetterTopicMessages

        public java.util.Map<MessageIdImpl,​java.util.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​(java.util.function.UnaryOperator<org.apache.pulsar.client.impl.HandlerState.State> updater)