Class Subscriber (1.123.0)

public class Subscriber extends AbstractApiService implements SubscriberInterface

A Cloud Pub/Sub subscriber that is associated with a specific subscription at creation.

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 Builder#setMaxAckExtensionPeriod(Duration)). Note: message redelivery is still possible.

It also provides customizable options that control:

  • Ack deadline extension: such as the amount of time ahead to trigger the extension of message acknowledgement expiration.
  • Flow control: such as the maximum outstanding messages or maximum outstanding bytes to keep in memory before the receiver either ack or nack them.

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.

Inheritance

java.lang.Object > AbstractApiService > Subscriber

Implements

SubscriberInterface

Static Methods

getDeliveryAttempt(PubsubMessage message)

public static Integer getDeliveryAttempt(PubsubMessage message)

Returns the delivery attempt count for a received PubsubMessage

Parameter
NameDescription
messagePubsubMessage
Returns
TypeDescription
Integer

newBuilder(ProjectSubscriptionName subscription, MessageReceiver receiver)

public static Subscriber.Builder newBuilder(ProjectSubscriptionName subscription, MessageReceiver receiver)

Constructs a new Builder.

Parameters
NameDescription
subscriptionProjectSubscriptionName

Cloud Pub/Sub subscription to bind the subscriber to

receiverMessageReceiver

an implementation of MessageReceiver used to process the received messages

Returns
TypeDescription
Subscriber.Builder

newBuilder(ProjectSubscriptionName subscription, MessageReceiverWithAckResponse receiver)

public static Subscriber.Builder newBuilder(ProjectSubscriptionName subscription, MessageReceiverWithAckResponse receiver)
Parameters
NameDescription
subscriptionProjectSubscriptionName
receiverMessageReceiverWithAckResponse
Returns
TypeDescription
Subscriber.Builder

newBuilder(String subscription, MessageReceiver receiver)

public static Subscriber.Builder newBuilder(String subscription, MessageReceiver receiver)

Constructs a new Builder.

Parameters
NameDescription
subscriptionString

Cloud Pub/Sub subscription to bind the subscriber to

receiverMessageReceiver

an implementation of MessageReceiver used to process the received messages

Returns
TypeDescription
Subscriber.Builder

newBuilder(String subscription, MessageReceiverWithAckResponse receiver)

public static Subscriber.Builder newBuilder(String subscription, MessageReceiverWithAckResponse receiver)
Parameters
NameDescription
subscriptionString
receiverMessageReceiverWithAckResponse
Returns
TypeDescription
Subscriber.Builder

Methods

doStart()

protected void doStart()
Overrides

doStop()

protected void doStop()
Overrides

getFlowControlSettings()

public FlowControlSettings getFlowControlSettings()

The flow control settings the Subscriber is configured with.

Returns
TypeDescription
FlowControlSettings

getSubscriptionNameString()

public String getSubscriptionNameString()

Subscription which the subscriber is subscribed to.

Returns
TypeDescription
String

startAsync()

public ApiService startAsync()

Initiates service startup and returns immediately.

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();
 
Returns
TypeDescription
ApiService
Overrides