public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMultipleConsumers implements Dispatcher, AsyncCallbacks.ReadEntriesCallback
| Modifier and Type | Class and Description |
|---|---|
protected static class |
PersistentDispatcherMultipleConsumers.ReadType |
| Modifier and Type | Field and Description |
|---|---|
protected static AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> |
BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER |
protected ManagedCursor |
cursor |
protected Optional<DispatchRateLimiter> |
dispatchRateLimiter |
protected boolean |
havePendingRead |
protected boolean |
havePendingReplayRead |
protected com.google.common.collect.Range<PositionImpl> |
lastIndividualDeletedRangeFromCursorRecovery |
protected PositionImpl |
minReplayedPosition |
protected String |
name |
protected int |
readBatchSize |
protected Backoff |
readFailureBackoff |
protected MessageRedeliveryController |
redeliveryMessages |
protected RedeliveryTracker |
redeliveryTracker |
protected boolean |
shouldRewindBeforeReadingOrReplaying |
protected PersistentTopic |
topic |
protected static AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> |
TOTAL_AVAILABLE_PERMITS_UPDATER |
protected int |
totalAvailablePermits |
protected int |
totalUnackedMessages |
consumerList, consumerSet, currentConsumerRoundRobinIndex, FALSE, IS_CLOSED_UPDATER, TRUEserviceConfig, subscription| Constructor and Description |
|---|
PersistentDispatcherMultipleConsumers(PersistentTopic topic,
ManagedCursor cursor,
Subscription subscription) |
PersistentDispatcherMultipleConsumers(PersistentTopic topic,
ManagedCursor cursor,
Subscription subscription,
boolean allowOutOfOrderDelivery) |
| Modifier and Type | Method and Description |
|---|---|
void |
addConsumer(Consumer consumer) |
protected boolean |
addMessageToReplay(long ledgerId,
long entryId) |
protected boolean |
addMessageToReplay(long ledgerId,
long entryId,
long stickyKeyHash) |
void |
addUnAckedMessages(int numberOfMessages) |
protected Set<? extends Position> |
asyncReplayEntries(Set<? extends Position> positions) |
protected Set<? extends Position> |
asyncReplayEntriesInOrder(Set<? extends Position> positions) |
void |
blockDispatcherOnUnackedMsgs() |
protected org.apache.commons.lang3.tuple.Pair<Integer,Long> |
calculateToRead(int currentTotalAvailablePermits) |
protected void |
cancelPendingRead() |
boolean |
canUnsubscribe(Consumer consumer) |
boolean |
checkAndUnblockIfStuck()
Checks if dispatcher is stuck and unblocks the dispatch if needed.
|
void |
clearDelayedMessages() |
CompletableFuture<Void> |
close()
mark dispatcher closed to stop new incoming requests and disconnect all consumers.
|
void |
consumerFlow(Consumer consumer,
int additionalNumberOfMessages)
Indicates that this consumer is now ready to receive more messages.
|
void |
cursorIsReset() |
CompletableFuture<Void> |
disconnectActiveConsumers(boolean isResetCursor)
Disconnect active consumers.
|
CompletableFuture<Void> |
disconnectAllConsumers(boolean isResetCursor)
disconnect all consumers.
|
CopyOnWriteArrayList<Consumer> |
getConsumers() |
protected int |
getFirstAvailableConsumerPermits() |
protected Set<PositionImpl> |
getMessagesToReplayNow(int maxMessagesToRead) |
String |
getName() |
long |
getNumberOfDelayedMessages() |
Optional<DispatchRateLimiter> |
getRateLimiter() |
RedeliveryTracker |
getRedeliveryTracker() |
protected int |
getStickyKeyHash(Entry entry) |
PersistentTopic |
getTopic() |
int |
getTotalUnackedMessages() |
org.apache.pulsar.common.api.proto.CommandSubscribe.SubType |
getType() |
void |
initializeDispatchRateLimiterIfNeeded(Optional<org.apache.pulsar.common.policies.data.Policies> policies) |
protected boolean |
isAtleastOneConsumerAvailable()
returns true only if
AbstractDispatcherMultipleConsumers.consumerList
has atleast one unblocked consumer and have available permits. |
boolean |
isBlockedDispatcherOnUnackedMsgs() |
boolean |
isConsumerAvailable(Consumer consumer) |
boolean |
isConsumerConnected() |
protected boolean |
isConsumersExceededOnSubscription()
Determine whether the number of consumers on the subscription reaches the threshold.
|
void |
readEntriesComplete(List<Entry> entries,
Object ctx) |
void |
readEntriesFailed(ManagedLedgerException exception,
Object ctx) |
void |
readMoreEntries() |
void |
redeliverUnacknowledgedMessages(Consumer consumer) |
void |
redeliverUnacknowledgedMessages(Consumer consumer,
List<PositionImpl> positions) |
void |
removeConsumer(Consumer consumer) |
void |
reset()
mark dispatcher open to serve new incoming requests.
|
void |
resetCloseFuture() |
protected void |
sendMessagesToConsumers(PersistentDispatcherMultipleConsumers.ReadType readType,
List<Entry> entries) |
protected boolean |
shouldPauseDeliveryForDelayTracker() |
boolean |
trackDelayedDelivery(long ledgerId,
long entryId,
org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata)
Check with dispatcher if the message should be added to the delayed delivery tracker.
|
void |
unBlockDispatcherOnUnackedMsgs() |
void |
updateRateLimiter(org.apache.pulsar.common.policies.data.DispatchRate dispatchRate) |
getNextConsumer, getRandomConsumer, isClosedcomputeReadLimits, filterEntriesForConsumer, filterEntriesForConsumer, isConsumersExceededOnSubscription, peekStickyKey, updateEntryWrapperWithMetadataclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitdisconnectAllConsumers, isClosed, markDeletePositionMoveForwardprotected final PersistentTopic topic
protected final ManagedCursor cursor
protected volatile com.google.common.collect.Range<PositionImpl> lastIndividualDeletedRangeFromCursorRecovery
protected final MessageRedeliveryController redeliveryMessages
protected final RedeliveryTracker redeliveryTracker
protected volatile boolean havePendingRead
protected volatile boolean havePendingReplayRead
protected volatile PositionImpl minReplayedPosition
protected boolean shouldRewindBeforeReadingOrReplaying
protected final String name
protected static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> TOTAL_AVAILABLE_PERMITS_UPDATER
protected volatile int totalAvailablePermits
protected volatile int readBatchSize
protected final Backoff readFailureBackoff
protected volatile int totalUnackedMessages
protected static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER
protected Optional<DispatchRateLimiter> dispatchRateLimiter
public PersistentDispatcherMultipleConsumers(PersistentTopic topic, ManagedCursor cursor, Subscription subscription)
public PersistentDispatcherMultipleConsumers(PersistentTopic topic, ManagedCursor cursor, Subscription subscription, boolean allowOutOfOrderDelivery)
public void addConsumer(Consumer consumer) throws BrokerServiceException
addConsumer in interface DispatcherBrokerServiceExceptionprotected boolean isConsumersExceededOnSubscription()
AbstractBaseDispatcherisConsumersExceededOnSubscription in class AbstractBaseDispatcherpublic void removeConsumer(Consumer consumer) throws BrokerServiceException
removeConsumer in interface DispatcherBrokerServiceExceptionpublic void consumerFlow(Consumer consumer, int additionalNumberOfMessages)
DispatcherconsumerFlow in interface Dispatcherpublic void readMoreEntries()
protected org.apache.commons.lang3.tuple.Pair<Integer,Long> calculateToRead(int currentTotalAvailablePermits)
protected Set<? extends Position> asyncReplayEntries(Set<? extends Position> positions)
protected Set<? extends Position> asyncReplayEntriesInOrder(Set<? extends Position> positions)
public boolean isConsumerConnected()
isConsumerConnected in interface DispatcherisConsumerConnected in class AbstractDispatcherMultipleConsumerspublic CopyOnWriteArrayList<Consumer> getConsumers()
getConsumers in interface DispatchergetConsumers in class AbstractDispatcherMultipleConsumerspublic boolean canUnsubscribe(Consumer consumer)
canUnsubscribe in interface DispatchercanUnsubscribe in class AbstractDispatcherMultipleConsumerspublic CompletableFuture<Void> close()
Dispatcherclose in interface Dispatcherpublic CompletableFuture<Void> disconnectAllConsumers(boolean isResetCursor)
DispatcherdisconnectAllConsumers in interface Dispatcherprotected void cancelPendingRead()
cancelPendingRead in class AbstractDispatcherMultipleConsumerspublic CompletableFuture<Void> disconnectActiveConsumers(boolean isResetCursor)
DispatcherdisconnectActiveConsumers in interface Dispatcherpublic void resetCloseFuture()
resetCloseFuture in interface DispatcherresetCloseFuture in class AbstractBaseDispatcherpublic void reset()
Dispatcherreset in interface Dispatcherpublic org.apache.pulsar.common.api.proto.CommandSubscribe.SubType getType()
getType in interface DispatchergetType in class AbstractDispatcherMultipleConsumerspublic void readEntriesComplete(List<Entry> entries, Object ctx)
readEntriesComplete in interface AsyncCallbacks.ReadEntriesCallbackprotected void sendMessagesToConsumers(PersistentDispatcherMultipleConsumers.ReadType readType, List<Entry> entries)
public void readEntriesFailed(ManagedLedgerException exception, Object ctx)
readEntriesFailed in interface AsyncCallbacks.ReadEntriesCallbackprotected boolean isAtleastOneConsumerAvailable()
AbstractDispatcherMultipleConsumers.consumerList
has atleast one unblocked consumer and have available permits.protected int getFirstAvailableConsumerPermits()
public boolean isConsumerAvailable(Consumer consumer)
isConsumerAvailable in class AbstractDispatcherMultipleConsumerspublic void redeliverUnacknowledgedMessages(Consumer consumer)
redeliverUnacknowledgedMessages in interface Dispatcherpublic void redeliverUnacknowledgedMessages(Consumer consumer, List<PositionImpl> positions)
redeliverUnacknowledgedMessages in interface Dispatcherpublic void addUnAckedMessages(int numberOfMessages)
addUnAckedMessages in interface Dispatcherpublic boolean isBlockedDispatcherOnUnackedMsgs()
public void blockDispatcherOnUnackedMsgs()
public void unBlockDispatcherOnUnackedMsgs()
public int getTotalUnackedMessages()
public String getName()
public RedeliveryTracker getRedeliveryTracker()
getRedeliveryTracker in interface Dispatcherpublic Optional<DispatchRateLimiter> getRateLimiter()
getRateLimiter in interface Dispatcherpublic void updateRateLimiter(org.apache.pulsar.common.policies.data.DispatchRate dispatchRate)
updateRateLimiter in interface Dispatcherpublic void initializeDispatchRateLimiterIfNeeded(Optional<org.apache.pulsar.common.policies.data.Policies> policies)
initializeDispatchRateLimiterIfNeeded in interface Dispatcherpublic boolean trackDelayedDelivery(long ledgerId,
long entryId,
org.apache.pulsar.common.api.proto.MessageMetadata msgMetadata)
DispatchertrackDelayedDelivery in interface Dispatcherprotected Set<PositionImpl> getMessagesToReplayNow(int maxMessagesToRead)
protected boolean shouldPauseDeliveryForDelayTracker()
public long getNumberOfDelayedMessages()
getNumberOfDelayedMessages in interface Dispatcherpublic void clearDelayedMessages()
clearDelayedMessages in interface Dispatcherpublic void cursorIsReset()
cursorIsReset in interface Dispatcherprotected boolean addMessageToReplay(long ledgerId,
long entryId,
long stickyKeyHash)
protected boolean addMessageToReplay(long ledgerId,
long entryId)
public boolean checkAndUnblockIfStuck()
DispatchercheckAndUnblockIfStuck in interface Dispatcherpublic PersistentTopic getTopic()
protected int getStickyKeyHash(Entry entry)
Copyright © 2017–2022 Apache Software Foundation. All rights reserved.