Package org.apache.pulsar.client.impl
Class ConsumerImpl<T>
- java.lang.Object
-
- org.apache.pulsar.client.impl.ConsumerBase<T>
-
- org.apache.pulsar.client.impl.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>
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.pulsar.client.impl.ConsumerBase
ConsumerBase.OpBatchReceive<T>
-
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap<java.lang.String,org.apache.pulsar.client.impl.ConsumerImpl.ChunkedMessageCtx>chunkedMessagesMapprotected PulsarClientImplclientprotected longexpireTimeOfIncompleteChunkedMessageMillisprotected org.apache.pulsar.client.api.MessageIdlastDequeuedMessageIdprotected booleanpausedprotected ConsumerStatsRecorderstatsprotected java.lang.Stringtopic-
Fields inherited from class org.apache.pulsar.client.impl.ConsumerBase
batchReceivePolicy, batchReceiveTimeout, conf, CONSUMER_EPOCH, consumerEpoch, consumerEventListener, consumerName, executorProvider, externalPinnedExecutor, incomingMessagesSize, interceptors, internalPinnedExecutor, listener, maxReceiverQueueSize, pendingBatchReceives, pendingReceives, reentrantLock, schema, subscribeFuture, subscription, unAckedChunkedMessageIdSequenceMap
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedConsumerImpl(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 Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanchangeToConnecting()protected booleanchangeToReadyState()protected booleanchangeToRegisteringSchemaState()intclearIncomingMessagesAndGetMessageNumber()java.util.concurrent.CompletableFuture<java.lang.Void>closeAsync()protected voidcompleteOpBatchReceive(ConsumerBase.OpBatchReceive<T> op)voidconnectionFailed(org.apache.pulsar.client.api.PulsarClientException exception)voidconnectionOpened(ClientCnx cnx)protected voidconsumerIsReconnectedToBroker(ClientCnx cnx, int currentQueueSize)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)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)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.String> customProperties, long delayTime, java.util.concurrent.TimeUnit unit)booleanequals(java.lang.Object o)protected org.apache.pulsar.client.impl.HandlerState.StategetAndUpdateState(java.util.function.UnaryOperator<org.apache.pulsar.client.impl.HandlerState.State> updater)intgetAvailablePermits()PulsarClientImplgetClient()ClientCnxgetClientCnx()ConnectionHandlergetConnectionHandler()longgetLastDisconnectedTimestamp()java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.MessageId>getLastMessageIdAsync()java.util.Map<MessageIdImpl,java.util.List<MessageImpl<T>>>getPossibleSendToDeadLetterTopicMessages()protected org.apache.pulsar.client.impl.HandlerState.StategetState()ConsumerStatsRecordergetStats()java.lang.StringgetTopicNameWithoutPartition()UnAckedMessageTrackergetUnAckedMessageTracker()inthashCode()booleanhasMessageAvailable()java.util.concurrent.CompletableFuture<java.lang.Boolean>hasMessageAvailableAsync()booleanhasReachedEndOfTopic()voidincreaseAvailablePermits(int delta)protected voidincreaseAvailablePermits(ClientCnx currentCnx, int delta)protected org.apache.pulsar.client.api.Messages<T>internalBatchReceive()protected java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.Messages<T>>internalBatchReceiveAsync()java.util.concurrent.CompletableFuture<org.apache.pulsar.client.impl.ConsumerImpl.GetLastMessageIdResponse>internalGetLastMessageIdAsync()protected org.apache.pulsar.client.api.Message<T>internalReceive()protected org.apache.pulsar.client.api.Message<T>internalReceive(long timeout, java.util.concurrent.TimeUnit unit)protected java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.Message<T>>internalReceiveAsync()protected booleanisBatch(org.apache.pulsar.common.api.proto.MessageMetadata messageMetadata)booleanisConnected()booleanisConnected(ClientCnx cnx)protected voidmessageProcessed(org.apache.pulsar.client.api.Message<?> msg)Record the event that one message has been processed by the application.voidnegativeAcknowledge(org.apache.pulsar.client.api.Message<?> message)voidnegativeAcknowledge(org.apache.pulsar.client.api.MessageId messageId)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)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)intnumMessagesInQueue()voidpause()voidredeliverUnacknowledgedMessages()voidredeliverUnacknowledgedMessages(java.util.Set<org.apache.pulsar.client.api.MessageId> messageIds)Redelivers the given unacknowledged messages.protected voidremoveExpireIncompleteChunkedMessages()voidresume()voidseek(long timestamp)voidseek(java.util.function.Function<java.lang.String,java.lang.Object> function)voidseek(org.apache.pulsar.client.api.MessageId messageId)java.util.concurrent.CompletableFuture<java.lang.Void>seekAsync(long timestamp)java.util.concurrent.CompletableFuture<java.lang.Void>seekAsync(java.util.function.Function<java.lang.String,java.lang.Object> function)java.util.concurrent.CompletableFuture<java.lang.Void>seekAsync(org.apache.pulsar.client.api.MessageId messageId)protected voidsetState(org.apache.pulsar.client.impl.HandlerState.State s)protected voidtrackMessage(org.apache.pulsar.client.api.Message<?> msg)protected voidtrackMessage(org.apache.pulsar.client.api.MessageId messageId)protected voidtrackMessage(org.apache.pulsar.client.api.MessageId messageId, int redeliveryCount)java.util.concurrent.CompletableFuture<java.lang.Void>unsubscribeAsync()-
Methods inherited from class org.apache.pulsar.client.impl.ConsumerBase
acknowledge, acknowledge, acknowledge, acknowledge, acknowledgeAsync, acknowledgeAsync, acknowledgeAsync, acknowledgeAsync, acknowledgeAsync, acknowledgeCumulative, acknowledgeCumulative, acknowledgeCumulativeAsync, acknowledgeCumulativeAsync, acknowledgeCumulativeAsync, batchReceive, batchReceiveAsync, beforeConsume, callMessageListener, canEnqueueMessage, clearIncomingMessages, close, completePendingBatchReceive, completePendingReceive, decreaseIncomingMessageSize, doAcknowledgeWithTxn, doAcknowledgeWithTxn, enqueueMessageAndCheckBatchReceive, failPendingReceive, getConsumerName, getIncomingMessageSize, getLastMessageId, getNewMessagesImpl, getSubscription, getSubType, getTopic, getTotalIncomingMessages, hasBatchReceiveTimeout, hasEnoughMessagesForBatchReceive, hasNextPendingReceive, hasPendingBatchReceive, isValidConsumerEpoch, negativeAcknowledge, nextPendingReceive, notifyPendingBatchReceivedCallBack, notifyPendingBatchReceivedCallBack, onAcknowledge, onAcknowledgeCumulative, onAckTimeoutSend, onNegativeAcksSend, onPartitionsChange, peekMessageKey, receive, receive, receiveAsync, reconsumeLater, reconsumeLater, reconsumeLater, reconsumeLaterAsync, reconsumeLaterAsync, reconsumeLaterAsync, reconsumeLaterCumulative, reconsumeLaterCumulativeAsync, reconsumeLaterCumulativeAsync, resetIncomingMessageSize, setMaxReceiverQueueSize, subscribeFuture, toString, triggerBatchReceiveTimeoutTask, tryTriggerListener, unsubscribe
-
-
-
-
Field Detail
-
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<java.lang.String,org.apache.pulsar.client.impl.ConsumerImpl.ChunkedMessageCtx> chunkedMessagesMap
-
expireTimeOfIncompleteChunkedMessageMillis
protected long expireTimeOfIncompleteChunkedMessageMillis
-
client
protected final PulsarClientImpl client
-
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
-
getConnectionHandler
public ConnectionHandler getConnectionHandler()
-
getUnAckedMessageTracker
public UnAckedMessageTracker getUnAckedMessageTracker()
-
unsubscribeAsync
public java.util.concurrent.CompletableFuture<java.lang.Void> unsubscribeAsync()
- Specified by:
unsubscribeAsyncin interfaceorg.apache.pulsar.client.api.Consumer<T>- Specified by:
unsubscribeAsyncin classConsumerBase<T>
-
internalReceive
protected org.apache.pulsar.client.api.Message<T> internalReceive() throws org.apache.pulsar.client.api.PulsarClientException
- Specified by:
internalReceivein classConsumerBase<T>- Throws:
org.apache.pulsar.client.api.PulsarClientException
-
internalReceiveAsync
protected java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.Message<T>> internalReceiveAsync()
- Specified by:
internalReceiveAsyncin classConsumerBase<T>
-
internalReceive
protected org.apache.pulsar.client.api.Message<T> internalReceive(long timeout, java.util.concurrent.TimeUnit unit) throws org.apache.pulsar.client.api.PulsarClientException
- Specified by:
internalReceivein classConsumerBase<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:
internalBatchReceivein classConsumerBase<T>- Throws:
org.apache.pulsar.client.api.PulsarClientException
-
internalBatchReceiveAsync
protected java.util.concurrent.CompletableFuture<org.apache.pulsar.client.api.Messages<T>> internalBatchReceiveAsync()
- Specified by:
internalBatchReceiveAsyncin classConsumerBase<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:
doAcknowledgein classConsumerBase<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:
doAcknowledgein classConsumerBase<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.String> customProperties, long delayTime, java.util.concurrent.TimeUnit unit)- Specified by:
doReconsumeLaterin classConsumerBase<T>
-
negativeAcknowledge
public void negativeAcknowledge(org.apache.pulsar.client.api.MessageId messageId)
- Specified by:
negativeAcknowledgein interfaceorg.apache.pulsar.client.api.Consumer<T>
-
negativeAcknowledge
public void negativeAcknowledge(org.apache.pulsar.client.api.Message<?> message)
- Specified by:
negativeAcknowledgein interfaceorg.apache.pulsar.client.api.Consumer<T>- Overrides:
negativeAcknowledgein classConsumerBase<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:
closeAsyncin interfaceorg.apache.pulsar.client.api.Consumer<T>- Specified by:
closeAsyncin classConsumerBase<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:
messageProcessedin classConsumerBase<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)
-
pause
public void pause()
- Specified by:
pausein interfaceorg.apache.pulsar.client.api.Consumer<T>
-
resume
public void resume()
- Specified by:
resumein interfaceorg.apache.pulsar.client.api.Consumer<T>
-
getLastDisconnectedTimestamp
public long getLastDisconnectedTimestamp()
- Specified by:
getLastDisconnectedTimestampin interfaceorg.apache.pulsar.client.api.Consumer<T>
-
isConnected
public boolean isConnected()
- Specified by:
isConnectedin interfaceorg.apache.pulsar.client.api.Consumer<T>
-
isConnected
public boolean isConnected(ClientCnx cnx)
-
getAvailablePermits
public int getAvailablePermits()
- Specified by:
getAvailablePermitsin classConsumerBase<T>
-
numMessagesInQueue
public int numMessagesInQueue()
- Specified by:
numMessagesInQueuein classConsumerBase<T>
-
redeliverUnacknowledgedMessages
public void redeliverUnacknowledgedMessages()
- Specified by:
redeliverUnacknowledgedMessagesin interfaceorg.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:ConsumerBaseRedelivers 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:
redeliverUnacknowledgedMessagesin classConsumerBase<T>
-
completeOpBatchReceive
protected void completeOpBatchReceive(ConsumerBase.OpBatchReceive<T> op)
- Specified by:
completeOpBatchReceivein classConsumerBase<T>
-
seek
public void seek(org.apache.pulsar.client.api.MessageId messageId) throws org.apache.pulsar.client.api.PulsarClientException- Specified by:
seekin interfaceorg.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:
seekin interfaceorg.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:
seekin interfaceorg.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:
seekAsyncin interfaceorg.apache.pulsar.client.api.Consumer<T>
-
seekAsync
public java.util.concurrent.CompletableFuture<java.lang.Void> seekAsync(long timestamp)
- Specified by:
seekAsyncin interfaceorg.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:
seekAsyncin interfaceorg.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:
getLastMessageIdAsyncin interfaceorg.apache.pulsar.client.api.Consumer<T>- Specified by:
getLastMessageIdAsyncin classConsumerBase<T>
-
internalGetLastMessageIdAsync
public java.util.concurrent.CompletableFuture<org.apache.pulsar.client.impl.ConsumerImpl.GetLastMessageIdResponse> internalGetLastMessageIdAsync()
-
getStats
public ConsumerStatsRecorder getStats()
- Specified by:
getStatsin interfaceorg.apache.pulsar.client.api.Consumer<T>
-
hasReachedEndOfTopic
public boolean hasReachedEndOfTopic()
- Specified by:
hasReachedEndOfTopicin interfaceorg.apache.pulsar.client.api.Consumer<T>
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equalsin classjava.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)
-
getClient
public PulsarClientImpl getClient()
-
-