public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMultipleConsumers implements Dispatcher, AsyncCallbacks.ReadEntriesCallback
| Modifier and Type | Field and Description |
|---|---|
protected ManagedCursor |
cursor |
protected Optional<DispatchRateLimiter> |
dispatchRateLimiter |
protected com.google.common.collect.Range<PositionImpl> |
lastIndividualDeletedRangeFromCursorRecovery |
protected String |
name |
protected RedeliveryTracker |
redeliveryTracker |
protected ServiceConfiguration |
serviceConfig |
protected PersistentTopic |
topic |
protected static AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> |
TOTAL_AVAILABLE_PERMITS_UPDATER |
protected int |
totalAvailablePermits |
consumerList, consumerSet, currentConsumerRoundRobinIndex, FALSE, IS_CLOSED_UPDATER, TRUENONE_KEY, subscription| Constructor and Description |
|---|
PersistentDispatcherMultipleConsumers(PersistentTopic topic,
ManagedCursor cursor,
Subscription subscription) |
| Modifier and Type | Method and Description |
|---|---|
void |
addConsumer(Consumer consumer) |
void |
addMessageToReplay(long ledgerId,
long entryId) |
void |
addUnAckedMessages(int numberOfMessages) |
protected Set<? extends Position> |
asyncReplayEntries(Set<? extends Position> positions) |
protected Set<? extends Position> |
asyncReplayEntriesInOrder(Set<? extends Position> positions) |
void |
blockDispatcherOnUnackedMsgs() |
boolean |
canUnsubscribe(Consumer consumer) |
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 Set<PositionImpl> |
getMessagesToReplayNow(int maxMessagesToRead) |
String |
getName() |
long |
getNumberOfDelayedMessages() |
Optional<DispatchRateLimiter> |
getRateLimiter() |
RedeliveryTracker |
getRedeliveryTracker() |
PersistentTopic |
getTopic() |
int |
getTotalUnackedMessages() |
org.apache.pulsar.common.api.proto.PulsarApi.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() |
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(org.apache.pulsar.broker.service.persistent.PersistentDispatcherMultipleConsumers.ReadType readType,
List<Entry> entries) |
boolean |
trackDelayedDelivery(long ledgerId,
long entryId,
org.apache.pulsar.common.api.proto.PulsarApi.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, isClosedfilterEntriesForConsumer, peekStickyKeyclone, 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 RedeliveryTracker redeliveryTracker
protected final String name
protected static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> TOTAL_AVAILABLE_PERMITS_UPDATER
protected volatile int totalAvailablePermits
protected final ServiceConfiguration serviceConfig
protected Optional<DispatchRateLimiter> dispatchRateLimiter
public PersistentDispatcherMultipleConsumers(PersistentTopic topic, ManagedCursor cursor, Subscription subscription)
public void addConsumer(Consumer consumer) throws BrokerServiceException
addConsumer in interface DispatcherBrokerServiceExceptionpublic void removeConsumer(Consumer consumer) throws BrokerServiceException
removeConsumer in interface DispatcherBrokerServiceExceptionpublic void consumerFlow(Consumer consumer, int additionalNumberOfMessages)
DispatcherconsumerFlow in interface Dispatcherpublic void readMoreEntries()
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 Dispatcherpublic 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.PulsarApi.CommandSubscribe.SubType getType()
getType in interface DispatchergetType in class AbstractDispatcherMultipleConsumerspublic void readEntriesComplete(List<Entry> entries, Object ctx)
readEntriesComplete in interface AsyncCallbacks.ReadEntriesCallbackprotected void sendMessagesToConsumers(org.apache.pulsar.broker.service.persistent.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 permitspublic 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.PulsarApi.MessageMetadata msgMetadata)
DispatchertrackDelayedDelivery in interface Dispatcherprotected Set<PositionImpl> getMessagesToReplayNow(int maxMessagesToRead)
public long getNumberOfDelayedMessages()
getNumberOfDelayedMessages in interface Dispatcherpublic void clearDelayedMessages()
clearDelayedMessages in interface Dispatcherpublic void cursorIsReset()
cursorIsReset in interface Dispatcherpublic void addMessageToReplay(long ledgerId,
long entryId)
addMessageToReplay in class AbstractBaseDispatcherpublic PersistentTopic getTopic()
Copyright © 2017–2021 Apache Software Foundation. All rights reserved.