public class ReaderImpl<T> extends Object implements Reader<T>
| Modifier and Type | Method and Description |
|---|---|
void |
close() |
CompletableFuture<Void> |
closeAsync()
Asynchronously close the reader and stop the broker to push more messages.
|
Topic |
getTopic() |
CompletableFuture<Boolean> |
hasMessageAvailable()
Asynchronously check if there is any message available to read from the current position.
|
boolean |
hasReachedEndOfTopic()
Return true if the topic was terminated and this reader has reached the end of the topic.
|
boolean |
isConnected() |
CompletableFuture<Message<T>> |
readNext()
Read asynchronously the next message in the topic.
|
CompletableFuture<Void> |
seek(long timestamp)
Reset the subscription associated with this reader to a specific message publish time.
|
CompletableFuture<Void> |
seek(MessageId messageId)
Reset the subscription associated with this reader to a specific message id.
|
CompletableFuture<Reader<T>> |
subscribeReturn() |
String |
toString() |
public Topic getTopic()
public CompletableFuture<Message<T>> readNext()
ReaderreadNextAsync() should be called subsequently once returned CompletableFuture gets complete
with received message. Else it creates backlog of receive requests in the application.
The returned future can be cancelled before completion by calling .cancel(false)
(CompletableFuture.cancel(boolean)) to remove it from the the backlog of receive requests. Another
choice for ensuring a proper clean up of the returned future is to use the CompletableFuture.orTimeout method
which is available on JDK9+. That would remove it from the backlog of receive requests if receiving exceeds
the timeout.
public CompletableFuture<Void> closeAsync()
ReadercloseAsync in interface Reader<T>public void close()
close in interface Closeableclose in interface AutoCloseablepublic boolean hasReachedEndOfTopic()
ReaderNote that this only applies to a "terminated" topic (where the topic is "sealed" and no
more messages can be published) and not just that the reader is simply caught up with
the publishers. Use Reader.hasMessageAvailable() to check for for that.
hasReachedEndOfTopic in interface Reader<T>public CompletableFuture<Boolean> hasMessageAvailable()
ReaderThis check can be used by an application to scan through a topic and stop when the reader reaches the current last published message.
Even if this call returns true, that will not guarantee that a subsequent call to Reader.readNext()
will not block.
hasMessageAvailable in interface Reader<T>PulsarClientException if there was any error in the operationpublic boolean isConnected()
isConnected in interface Reader<T>public CompletableFuture<Void> seek(MessageId messageId)
ReaderThe message id can either be a specific message or represent the first or last messages in the topic.
MessageId.earliest : Reset the reader on the earliest message available in the topic
MessageId.latest : Reset the reader on the latest message in the topic
Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the seek() on the individual partitions.
public CompletableFuture<Void> seek(long timestamp)
ReaderNote: this operation can only be done on non-partitioned topics. For these, one can rather perform the seek() on the individual partitions.
public CompletableFuture<Reader<T>> subscribeReturn()
Copyright © 2019-2021, TurtleQueue All Rights Reserved. Use is subject to license terms.