Package org.apache.pulsar.client.impl
Class ConsumerBase<T>
java.lang.Object
org.apache.pulsar.client.impl.ConsumerBase<T>
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Consumer<T>
,MessageAcknowledger
- Direct Known Subclasses:
ConsumerImpl
,MultiTopicsConsumerImpl
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionprotected final BatchReceivePolicy
protected io.netty.util.Timeout
protected final PulsarClientImpl
protected final ConsumerConfigurationData<T>
protected static final AtomicLongFieldUpdater<ConsumerBase>
protected long
protected final ConsumerEventListener
protected final String
protected static final AtomicIntegerFieldUpdater<ConsumerBase>
protected final ExecutorProvider
protected final ExecutorService
protected long
protected final Lock
protected static final int
protected final ConsumerInterceptors<T>
protected final ExecutorService
protected final MessageListener<T>
protected final int
protected static final double
protected static final AtomicIntegerFieldUpdater<ConsumerBase>
protected int
protected final ConcurrentLinkedQueue<ConsumerBase.OpBatchReceive<T>>
protected final ConcurrentLinkedQueue<CompletableFuture<Message<T>>>
protected URI
protected final AtomicBoolean
protected final CompletableFuture<Consumer<T>>
protected final String
protected final String
protected ConcurrentOpenHashMap<MessageIdAdv,
MessageIdImpl[]> protected UnAckedMessageTracker
-
Constructor Summary
ModifierConstructorDescriptionprotected
ConsumerBase
(PulsarClientImpl client, String topic, ConsumerConfigurationData<T> conf, int receiverQueueSize, ExecutorProvider executorProvider, CompletableFuture<Consumer<T>> subscribeFuture, Schema<T> schema, ConsumerInterceptors interceptors) -
Method Summary
Modifier and TypeMethodDescriptionvoid
acknowledge
(List<MessageId> messageIdList) void
acknowledge
(Message<?> message) void
acknowledge
(MessageId messageId) void
acknowledge
(Messages<?> messages) acknowledgeAsync
(List<MessageId> messageIdList) acknowledgeAsync
(List<MessageId> messageIdList, Transaction txn) acknowledgeAsync
(Message<?> message) acknowledgeAsync
(MessageId messageId) acknowledgeAsync
(MessageId messageId, Transaction txn) acknowledgeAsync
(Messages<?> messages) acknowledgeAsync
(Messages<?> messages, Transaction txn) void
acknowledgeCumulative
(Message<?> message) void
acknowledgeCumulative
(MessageId messageId) acknowledgeCumulativeAsync
(Message<?> message) acknowledgeCumulativeAsync
(MessageId messageId) acknowledgeCumulativeAsync
(MessageId messageId, Transaction txn) beforeConsume
(Message<T> message) protected void
callMessageListener
(Message<T> msg) protected boolean
canEnqueueMessage
(Message<T> message) protected boolean
protected boolean
protected boolean
protected void
void
close()
abstract CompletableFuture<Void>
protected abstract void
protected void
completePendingBatchReceive
(CompletableFuture<Messages<T>> future, Messages<T> messages) protected void
completePendingReceive
(CompletableFuture<Message<T>> receivedFuture, Message<T> message) protected void
decreaseIncomingMessageSize
(Message<?> message) protected abstract CompletableFuture<Void>
doAcknowledge
(List<MessageId> messageIdList, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) protected abstract CompletableFuture<Void>
doAcknowledge
(MessageId messageId, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) protected CompletableFuture<Void>
doAcknowledgeWithTxn
(List<MessageId> messageIdList, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) protected CompletableFuture<Void>
doAcknowledgeWithTxn
(MessageId messageId, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) protected abstract CompletableFuture<Void>
doReconsumeLater
(Message<?> message, CommandAck.AckType ackType, Map<String, String> customProperties, long delayTime, TimeUnit unit) protected boolean
enqueueMessageAndCheckBatchReceive
(Message<T> message) protected void
protected CompletableFuture<Void>
protected org.apache.pulsar.client.impl.HandlerState.State
getAndUpdateState
(UnaryOperator<org.apache.pulsar.client.impl.HandlerState.State> updater) abstract int
int
long
Deprecated.abstract CompletableFuture<MessageId>
Deprecated.protected MessagesImpl<T>
protected org.apache.pulsar.client.impl.HandlerState.State
getState()
protected CommandSubscribe.SubType
getTopic()
int
protected UnAckedMessageTracker
boolean
protected boolean
protected boolean
protected boolean
void
protected abstract CompletableFuture<Messages<T>>
internalReceive
(long timeout, TimeUnit unit) protected abstract CompletableFuture<Message<T>>
protected boolean
isSingleMessageAcked
(BitSetRecyclable ackBitSet, int batchIndex) protected boolean
isValidConsumerEpoch
(MessageImpl<T> message) protected abstract void
messageProcessed
(Message<?> msg) abstract int
void
negativeAcknowledge
(Message<?> message) void
negativeAcknowledge
(Messages<?> messages) protected CompletableFuture<Message<T>>
protected void
protected final void
notifyPendingBatchReceivedCallBack
(CompletableFuture<Messages<T>> batchReceiveFuture) abstract int
protected void
onAcknowledge
(List<MessageId> messageIds, Throwable exception) protected void
onAcknowledge
(MessageId messageId, Throwable exception) protected void
onAcknowledgeCumulative
(List<MessageId> messageIds, Throwable exception) protected void
onAcknowledgeCumulative
(MessageId messageId, Throwable exception) protected void
onAckTimeoutSend
(Set<MessageId> messageIds) protected void
onNegativeAcksSend
(Set<MessageId> messageIds) protected void
onPartitionsChange
(String topicName, int partitions) protected byte[]
peekMessageKey
(Message<T> msg) receive()
void
reconsumeLater
(Message<?> message, long delayTime, TimeUnit unit) void
reconsumeLater
(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) void
reconsumeLater
(Messages<?> messages, long delayTime, TimeUnit unit) reconsumeLaterAsync
(Message<?> message, long delayTime, TimeUnit unit) reconsumeLaterAsync
(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) reconsumeLaterAsync
(Messages<?> messages, long delayTime, TimeUnit unit) void
reconsumeLaterCumulative
(Message<?> message, long delayTime, TimeUnit unit) reconsumeLaterCumulativeAsync
(Message<?> message, long delayTime, TimeUnit unit) reconsumeLaterCumulativeAsync
(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) protected abstract void
redeliverUnacknowledgedMessages
(Set<MessageId> messageIds) Redelivers the given unacknowledged messages.protected void
protected void
protected abstract void
setCurrentReceiverQueueSize
(int newSize) Update the size of the consumer receive queue.protected void
setRedirectedClusterURI
(String serviceUrl, String serviceUrlTls) protected void
setState
(org.apache.pulsar.client.impl.HandlerState.State s) toString()
protected void
trackUnAckedMsgIfNoListener
(MessageId messageId, int redeliveryCount) protected void
protected void
void
void
unsubscribe
(boolean force) abstract CompletableFuture<Void>
unsubscribeAsync
(boolean force) protected abstract void
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.pulsar.client.api.Consumer
getLastDisconnectedTimestamp, getLastMessageIdsAsync, getStats, hasReachedEndOfTopic, isConnected, negativeAcknowledge, pause, redeliverUnacknowledgedMessages, resume, seek, seek, seek, seekAsync, seekAsync, seekAsync
-
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
-
conf
-
consumerName
-
subscribeFuture
-
listener
-
consumerEventListener
-
executorProvider
-
externalPinnedExecutor
-
internalPinnedExecutor
-
unAckedMessageTracker
-
unAckedChunkedMessageIdSequenceMap
-
pendingReceives
-
maxReceiverQueueSize
protected final int maxReceiverQueueSize -
MESSAGE_LISTENER_QUEUE_SIZE_UPDATER
-
messageListenerQueueSize
protected volatile int messageListenerQueueSize -
CURRENT_RECEIVER_QUEUE_SIZE_UPDATER
-
schema
-
interceptors
-
batchReceivePolicy
-
pendingBatchReceives
-
incomingMessagesSize
protected volatile long incomingMessagesSize -
batchReceiveTimeout
protected volatile io.netty.util.Timeout batchReceiveTimeout -
incomingQueueLock
-
CONSUMER_EPOCH
-
consumerEpoch
protected volatile long consumerEpoch -
scaleReceiverQueueHint
-
client
-
topic
-
redirectedClusterURI
-
-
Constructor Details
-
ConsumerBase
protected ConsumerBase(PulsarClientImpl client, String topic, ConsumerConfigurationData<T> conf, int receiverQueueSize, ExecutorProvider executorProvider, CompletableFuture<Consumer<T>> subscribeFuture, Schema<T> schema, ConsumerInterceptors interceptors)
-
-
Method Details
-
getUnAckedMessageTracker
-
triggerBatchReceiveTimeoutTask
protected void triggerBatchReceiveTimeoutTask() -
initReceiverQueueSize
public void initReceiverQueueSize() -
minReceiverQueueSize
public abstract int minReceiverQueueSize() -
expectMoreIncomingMessages
protected void expectMoreIncomingMessages() -
trackUnAckedMsgIfNoListener
-
reduceCurrentReceiverQueueSize
protected void reduceCurrentReceiverQueueSize() -
receive
- Specified by:
receive
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
receiveAsync
- Specified by:
receiveAsync
in interfaceConsumer<T>
-
internalReceive
- Throws:
PulsarClientException
-
internalReceiveAsync
-
receive
- Specified by:
receive
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
internalReceive
protected abstract Message<T> internalReceive(long timeout, TimeUnit unit) throws PulsarClientException - Throws:
PulsarClientException
-
batchReceive
- Specified by:
batchReceive
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
batchReceiveAsync
- Specified by:
batchReceiveAsync
in interfaceConsumer<T>
-
hasNextPendingReceive
protected boolean hasNextPendingReceive() -
nextPendingReceive
-
completePendingReceive
protected void completePendingReceive(CompletableFuture<Message<T>> receivedFuture, Message<T> message) -
failPendingReceive
-
internalBatchReceive
- Throws:
PulsarClientException
-
internalBatchReceiveAsync
-
acknowledge
- Specified by:
acknowledge
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
acknowledge
- Specified by:
acknowledge
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
acknowledge
- Specified by:
acknowledge
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
acknowledge
- Specified by:
acknowledge
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
reconsumeLater
public void reconsumeLater(Message<?> message, long delayTime, TimeUnit unit) throws PulsarClientException - Specified by:
reconsumeLater
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
reconsumeLater
public void reconsumeLater(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) throws PulsarClientException- Specified by:
reconsumeLater
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
reconsumeLater
public void reconsumeLater(Messages<?> messages, long delayTime, TimeUnit unit) throws PulsarClientException - Specified by:
reconsumeLater
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
acknowledgeCumulative
- Specified by:
acknowledgeCumulative
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
acknowledgeCumulative
- Specified by:
acknowledgeCumulative
in interfaceMessageAcknowledger
- Throws:
PulsarClientException
-
reconsumeLaterCumulative
public void reconsumeLaterCumulative(Message<?> message, long delayTime, TimeUnit unit) throws PulsarClientException - Specified by:
reconsumeLaterCumulative
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
reconsumeLaterAsync
public CompletableFuture<Void> reconsumeLaterAsync(Message<?> message, long delayTime, TimeUnit unit) - Specified by:
reconsumeLaterAsync
in interfaceConsumer<T>
-
reconsumeLaterAsync
public CompletableFuture<Void> reconsumeLaterAsync(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) - Specified by:
reconsumeLaterAsync
in interfaceConsumer<T>
-
reconsumeLaterAsync
public CompletableFuture<Void> reconsumeLaterAsync(Messages<?> messages, long delayTime, TimeUnit unit) - Specified by:
reconsumeLaterAsync
in interfaceConsumer<T>
-
acknowledgeCumulativeAsync
- Specified by:
acknowledgeCumulativeAsync
in interfaceMessageAcknowledger
-
reconsumeLaterCumulativeAsync
public CompletableFuture<Void> reconsumeLaterCumulativeAsync(Message<?> message, long delayTime, TimeUnit unit) - Specified by:
reconsumeLaterCumulativeAsync
in interfaceConsumer<T>
-
reconsumeLaterCumulativeAsync
public CompletableFuture<Void> reconsumeLaterCumulativeAsync(Message<?> message, Map<String, String> customProperties, long delayTime, TimeUnit unit) - Specified by:
reconsumeLaterCumulativeAsync
in interfaceConsumer<T>
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeAsync
- Specified by:
acknowledgeAsync
in interfaceMessageAcknowledger
-
acknowledgeCumulativeAsync
- Specified by:
acknowledgeCumulativeAsync
in interfaceMessageAcknowledger
-
acknowledgeCumulativeAsync
- Specified by:
acknowledgeCumulativeAsync
in interfaceMessageAcknowledger
-
negativeAcknowledge
- Specified by:
negativeAcknowledge
in interfaceConsumer<T>
-
doAcknowledgeWithTxn
protected CompletableFuture<Void> doAcknowledgeWithTxn(List<MessageId> messageIdList, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) -
doAcknowledgeWithTxn
protected CompletableFuture<Void> doAcknowledgeWithTxn(MessageId messageId, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) -
doAcknowledge
protected abstract CompletableFuture<Void> doAcknowledge(MessageId messageId, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) -
doAcknowledge
protected abstract CompletableFuture<Void> doAcknowledge(List<MessageId> messageIdList, CommandAck.AckType ackType, Map<String, Long> properties, TransactionImpl txn) -
doReconsumeLater
protected abstract CompletableFuture<Void> doReconsumeLater(Message<?> message, CommandAck.AckType ackType, Map<String, String> customProperties, long delayTime, TimeUnit unit) -
negativeAcknowledge
- Specified by:
negativeAcknowledge
in interfaceConsumer<T>
-
unsubscribe
- Specified by:
unsubscribe
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
unsubscribe
- Specified by:
unsubscribe
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
unsubscribeAsync
- Specified by:
unsubscribeAsync
in interfaceConsumer<T>
-
unsubscribeAsync
- Specified by:
unsubscribeAsync
in interfaceConsumer<T>
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
closeAsync
- Specified by:
closeAsync
in interfaceConsumer<T>
-
getLastMessageId
Deprecated.- Specified by:
getLastMessageId
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
getLastMessageIdAsync
Deprecated.- Specified by:
getLastMessageIdAsync
in interfaceConsumer<T>
-
getLastMessageIds
- Specified by:
getLastMessageIds
in interfaceConsumer<T>
- Throws:
PulsarClientException
-
getSubType
-
getAvailablePermits
public abstract int getAvailablePermits() -
numMessagesInQueue
public abstract int numMessagesInQueue() -
subscribeFuture
-
getTopic
-
getSubscription
- Specified by:
getSubscription
in interfaceConsumer<T>
-
getConsumerName
- Specified by:
getConsumerName
in interfaceConsumer<T>
-
redeliverUnacknowledgedMessages
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
-
beforeConsume
-
onAcknowledge
-
onAcknowledge
-
onAcknowledgeCumulative
-
onAcknowledgeCumulative
-
onNegativeAcksSend
-
onAckTimeoutSend
-
onPartitionsChange
-
canEnqueueMessage
-
enqueueMessageAndCheckBatchReceive
-
updateAutoScaleReceiverQueueHint
protected abstract void updateAutoScaleReceiverQueueHint() -
hasEnoughMessagesForBatchReceive
protected boolean hasEnoughMessagesForBatchReceive() -
notifyPendingBatchReceivedCallBack
protected void notifyPendingBatchReceivedCallBack() -
notifyPendingBatchReceivedCallBack
protected final void notifyPendingBatchReceivedCallBack(CompletableFuture<Messages<T>> batchReceiveFuture) -
completePendingBatchReceive
protected void completePendingBatchReceive(CompletableFuture<Messages<T>> future, Messages<T> messages) -
messageProcessed
-
tryTriggerListener
protected void tryTriggerListener() -
callMessageListener
-
peekMessageKey
-
getNewMessagesImpl
-
hasPendingBatchReceive
protected boolean hasPendingBatchReceive() -
resetIncomingMessageSize
protected void resetIncomingMessageSize() -
decreaseIncomingMessageSize
-
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. SeeConsumerBuilder.receiverQueueSize(int)
.- Parameters:
newSize
- new size of the receiver queue.
-
getCurrentReceiverQueueSize
public int getCurrentReceiverQueueSize() -
completeOpBatchReceive
-
isValidConsumerEpoch
-
isSingleMessageAcked
-
hasBatchReceiveTimeout
public boolean hasBatchReceiveTimeout() -
setRedirectedClusterURI
protected void setRedirectedClusterURI(String serviceUrl, String serviceUrlTls) throws URISyntaxException - Throws:
URISyntaxException
-
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
-