google-cloud-pubsubgoogle-cloud-pubsub-emulatorazure-web-pubsubgoogle-cloud-pubsublite

Create Google Pub/Sub subscription with expiration period as never


As per documentation, we can set Google Pub/Sub subscription with the expiration period as 'never expire'

Could you please share the Java code for the same? I have currently the following code

public void createSubscriptionForTheTopic(String appUid, String topicName, String pushEndpoint) throws IOException {
    ...

    SubscriptionAdminSettings subscriptionAdminSettings = ...;
    try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create(subscriptionAdminSettings)) {
        String projectName = ....;
        String subscriptionNameString = ...;
        ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(...);
        PushConfig pushConfig = PushConfig
                .newBuilder()
                .setPushEndpoint(pushEndpoint)
                .build();
        RetryPolicy.Builder retryPolicy = RetryPolicy.newBuilder()
                .setMinimumBackoff(Duration.newBuilder().setSeconds(10).build())
                .setMaximumBackoff(Duration.newBuilder().setSeconds(600).build());
        Subscription request = Subscription.newBuilder()
                .setName(subscriptionName.toString())
                .setTopic(topicName)
                .setPushConfig(pushConfig)
                .setAckDeadlineSeconds(10)
                .setRetryPolicy(retryPolicy).build();

        try {
            subscriptionAdminClient.deleteSubscription(subscriptionName.toString());
        } catch (ApiException e) {
            LOGGER.info("Subscription does not exist {}", subscriptionName, e);
        }

        Subscription subscription = subscriptionAdminClient.createSubscription(request);
        LOGGER.info("Created subscription {}", subscription.getName());
    }
}

Link: https://cloud.google.com/pubsub/docs/subscription-properties#expiration_period


Solution

  • You would add .setExpirationPolicy(ExpirationPolicy.getDefaultInstance()) to the Subscription builder:

    import com.google.pubsub.v1.ExpirationPolicy;
    
    ...
    
    Subscription request = Subscription.newBuilder()
      .setName(subscriptionName.toString())
      .setTopic(topicName)
      .setPushConfig(pushConfig)
      .setAckDeadlineSeconds(10)
      .setRetryPolicy(retryPolicy)
      .setExpirationPolicy(ExpirationPolicy.getDefaultInstance())
      .build();