使用Java客户端库配置PubSub的消息保留持续时间

使用Java客户端库配置PubSub的消息保留持续时间,java,google-cloud-pubsub,Java,Google Cloud Pubsub,我正在我的桌面应用程序中使用。我为特定主题创建订阅并从中接收数据。我想知道是否可以配置订阅的邮件保留期限。我哪儿都找不到。谢谢 为了让问题更清楚,我粘贴了用于创建订阅的代码块: String topicName = "some-topic"; String subscriptionName = "some-subscription"; ProjectTopicName topic = ProjectTopicName.of(PROJECT_ID, topicName); ProjectSubsc

我正在我的桌面应用程序中使用。我为特定主题创建订阅并从中接收数据。我想知道是否可以配置订阅的邮件保留期限。我哪儿都找不到。谢谢

为了让问题更清楚,我粘贴了用于创建订阅的代码块:

String topicName = "some-topic";
String subscriptionName = "some-subscription";
ProjectTopicName topic = ProjectTopicName.of(PROJECT_ID, topicName);
ProjectSubscriptionName subscription = ProjectSubscriptionName.of(PROJECT_ID, subscriptionName);
SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create(); // I reuse this object so I create it in advance
try {
   subscriptionAdminClient.createSubscription(subscription,
        topic,
        PushConfig.getDefaultInstance(),
        0
   );
} catch (ApiException e) {
   if (e.getStatusCode().getCode() != StatusCode.Code.ALREADY_EXISTS) {
        subscriptionAdminClient.close();
   }
}

您可以用Java配置订阅的消息保留期限。创建
订阅
对象时,可以在创建请求中提供。要在Java中执行此操作,请使用object,如本例所示(使用
com.google.cloud:google cloud pubsub:1.86.0
dependency):

请注意,
setMessageRetentionDuration
将a作为参数,因此您可能需要使用(
fromMillis
方法)将毫秒转换为protobuf
Duration
。还请注意,此字段:

不能超过7天或少于10分钟


这里似乎没有足够的信息来准确回答你的问题。查看我们的指南,编辑您的问题以添加更多细节。让我们看看你尝试了什么,为什么它不适合你,并再次检查你是否有一个具体、客观的问题可以回答。这就是我一直在寻找的!非常感谢你!
package com.example;

import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
import com.google.pubsub.v1.Subscription;
import com.google.pubsub.v1.TopicName;

import com.google.protobuf.util.Durations;

import java.io.IOException;

public class PubSubCreateSubscription {

    static Subscription createSubscriptionWithMessageRetentionDuration(
        String topicName,
        String subscriptionName,
        long messageRetentionDurationInMillis
    ) throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
            Subscription request = Subscription.newBuilder()
                .setName(subscriptionName)
                .setTopic(topicName)
                .setMessageRetentionDuration(Durations
                    .fromMillis(messageRetentionDurationInMillis))
                .build();

            return subscriptionAdminClient
                .createSubscription(request);
        }
    }

    public static void main(String[] args)
    {
        String topicName = "projects/[PROJECT]/topics/[TOPIC_NAME]";
        String subscriptionName = "projects/[PROJECT]/subscriptions/[SUBSCRIPTION_NAME]";

        try {
            Subscription mySubscription = createSubscriptionWithMessageRetentionDuration(
                topicName,
                subscriptionName,
                600000 // 600 000 ms = 10 minutes
            );
            // [...]
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}