anchor.diff:  
   NOTE: Generally when referring to topics and subscriptions, you can either use the short canonical name within the current project, or the fully-qualified name referring to a topic or subscription in a different project using the `projects/<project_name>/(topics|subscriptions)/<name>` format.
   
  -`PubSubAdmin` depends on `GcpProjectIdProvider` and either a `CredentialsProvider` or a `TopicAdminClient` and a `SubscriptionAdminClient`.
  -If given a `CredentialsProvider`, it creates a `TopicAdminClient` and a `SubscriptionAdminClient` with the Google Cloud Java Library for Pub/Sub default settings.
   The Spring Boot starter for GCP Pub/Sub auto-configures a `PubSubAdmin` object using the `GcpProjectIdProvider` and the `CredentialsProvider` auto-configured by the Spring Boot GCP Core starter.
   
   ==== Creating a topic
  
positive.code: 
  Please refer to our https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample[Pub/Sub JSON Payload Sample App] as a reference for using this functionality.
  
  === Reactive Stream Subscription
  
  It is also possible to acquire a reactive stream backed by a subscription.
  To do so, a Project Reactor dependency (`io.projectreactor:reactor-core`) must be added to the project.
  
negative.code: 
  NOTE: All `ack()`, `nack()`, and `modifyAckDeadline()` methods on messages, as well as `PubSubSubscriberTemplate`, are implemented asynchronously, returning a `ListenableFuture<Void>` to enable asynchronous processing.
  
  ===== Dead Letter Topics
  
  Your application may occasionally receive a message it cannot process.
  If you <<creating-a-subscription,create your `Subscription`>> passing the `Subscription.Builder` argument, you can specify a `DeadLetterPolicy` that will forward all `nack()`-ed and non-`ack()`-ed messages after a configurable amount of redelivery attempts.
  See https://cloud.google.com/pubsub/docs/dead-letter-topics[here] for more information.
  
  // TODO(ttomsu): make this an include to working code.
  [source,java,indent=0]
  ----
  public Subscription newSubscription() {
  	// Must use the fully-qualified topic name.
  	String fullDeadLetterTopic = PubSubTopicUtils
  						.toTopicName(DEAD_LETTER_TOPIC, gcpProjectIdProvider.getProjectId())
  						.toString();
  	return pubSubAdmin.createSubscription(Subscription.newBuilder()
  			.setName(SUBSCRIPTION_NAME)
  			.setTopic(TOPIC_NAME)
  			.setDeadLetterPolicy(DeadLetterPolicy.newBuilder()
  					.setDeadLetterTopic(fullDeadLetterTopic)
  					.setMaxDeliveryAttempts(6)
  					.build()));
  }
  ----
  
  Dead letter topics are no different than any other topic, though some https://cloud.google.com/pubsub/docs/dead-letter-topics#granting_forwarding_permissions[additional permissions] are necessary to ensure the Cloud Pub/Sub service can successfully `ack` the original message and re-`publish` it on the dead letter topic.
  
  ==== JSON support
  
  For serialization and deserialization of POJOs using Jackson JSON, configure a `PubSubMessageConverter` bean, and the Spring Boot starter for GCP Pub/Sub will automatically wire it into the `PubSubTemplate`.
  