public class Subscriber extends com.google.api.core.AbstractApiService implements SubscriberInterface
A Subscriber
allows you to provide an implementation of a receiver
to which messages are going to be delivered as soon as they are received by the
subscriber. The delivered messages then can be acked
or nacked
at will as they get processed by the receiver. Nacking a messages
implies a later redelivery of such message.
The subscriber handles the ack management, by automatically extending the ack deadline while
the message is being processed, to then issue the ack or nack of such message when the processing
is done (see Subscriber.Builder.setMaxAckExtensionPeriod(Duration)
). Note: message
redelivery is still possible.
It also provides customizable options that control:
Subscriber
will use the credentials set on the channel, which uses application default
credentials through GoogleCredentials.getApplicationDefault()
by default.
Subscriber
is implemented using Guava's
Service and provides the same methods. See Guava documentation for more
details.
Modifier and Type | Class and Description |
---|---|
static class |
Subscriber.Builder
Builder of
Subscribers . |
Modifier and Type | Method and Description |
---|---|
protected void |
doStart() |
protected void |
doStop() |
static Integer |
getDeliveryAttempt(PubsubMessage message)
Returns the delivery attempt count for a received
PubsubMessage |
com.google.api.gax.batching.FlowControlSettings |
getFlowControlSettings()
The flow control settings the Subscriber is configured with.
|
String |
getSubscriptionNameString()
Subscription which the subscriber is subscribed to.
|
static Subscriber.Builder |
newBuilder(ProjectSubscriptionName subscription,
MessageReceiver receiver)
Constructs a new
Subscriber.Builder . |
static Subscriber.Builder |
newBuilder(ProjectSubscriptionName subscription,
MessageReceiverWithAckResponse receiver) |
static Subscriber.Builder |
newBuilder(String subscription,
MessageReceiver receiver)
Constructs a new
Subscriber.Builder . |
static Subscriber.Builder |
newBuilder(String subscription,
MessageReceiverWithAckResponse receiver) |
com.google.api.core.ApiService |
startAsync()
Initiates service startup and returns immediately.
|
addListener, awaitRunning, awaitRunning, awaitTerminated, awaitTerminated, failureCause, isRunning, notifyFailed, notifyStarted, notifyStopped, state, stopAsync
public static Subscriber.Builder newBuilder(ProjectSubscriptionName subscription, MessageReceiver receiver)
Subscriber.Builder
.subscription
- Cloud Pub/Sub subscription to bind the subscriber toreceiver
- an implementation of MessageReceiver
used to process the received
messagespublic static Subscriber.Builder newBuilder(ProjectSubscriptionName subscription, MessageReceiverWithAckResponse receiver)
public static Subscriber.Builder newBuilder(String subscription, MessageReceiver receiver)
Subscriber.Builder
.subscription
- Cloud Pub/Sub subscription to bind the subscriber toreceiver
- an implementation of MessageReceiver
used to process the received
messagespublic static Subscriber.Builder newBuilder(String subscription, MessageReceiverWithAckResponse receiver)
public static Integer getDeliveryAttempt(PubsubMessage message)
PubsubMessage
public String getSubscriptionNameString()
public com.google.api.gax.batching.FlowControlSettings getFlowControlSettings()
public com.google.api.core.ApiService startAsync()
Example of receiving a specific number of messages.
Subscriber subscriber = Subscriber.newBuilder(subscription, receiver).build();
subscriber.addListener(new Subscriber.Listener() {
public void failed(Subscriber.State from, Throwable failure) {
// Handle error.
}
}, executor);
subscriber.startAsync();
// Wait for a stop signal.
// In a server, this might be a signal to stop serving.
// In this example, the signal is just a dummy Future.
//
// By default, Subscriber uses daemon threads (see
// https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html).
// Consequently, once other threads have terminated, Subscriber will not stop the JVM from
// exiting.
// If the Subscriber should simply run forever, either use the setExecutorProvider method in
// Subscriber.Builder
// to use non-daemon threads or run
// for (;;) {
// Thread.sleep(Long.MAX_VALUE);
// }
// at the end of main() to previent the main thread from exiting.
done.get();
subscriber.stopAsync().awaitTerminated();
startAsync
in interface com.google.api.core.ApiService
startAsync
in class com.google.api.core.AbstractApiService
protected void doStart()
doStart
in class com.google.api.core.AbstractApiService
protected void doStop()
doStop
in class com.google.api.core.AbstractApiService
Copyright © 2023 Google LLC. All rights reserved.