使用 Java 客户端库配置 PubSub 的消息保留期限
Configure message retention duration of PubSub with Java client library
我在桌面应用程序中使用 google cloud pubsub java library。我为特定主题创建订阅并从中接收数据。我想知道我是否可以配置订阅的消息保留期限。我无法在任何地方找到它。谢谢
为了让问题更清楚,我粘贴了我用来创建订阅的代码块:
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 中配置订阅的消息保留期限。创建 Subscription
对象时,可以提供 message_retention_duration field
in your creation request. To do this in Java, use setMessageRetentionDuration
method on Subscription.Builder
对象,如本例(使用 com.google.cloud:google-cloud-pubsub:1.86.0
依赖项):
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();
}
}
}
注意setMessageRetentionDuration
取一个Duration
as parameter, so you might need to use Durations
helper class (fromMillis
method for example) to convert your milliseconds to a protobuf Duration
. Note also that from the REST resource documentation,这个字段:
Cannot be more than 7 days or less than 10 minutes.
我在桌面应用程序中使用 google cloud pubsub java library。我为特定主题创建订阅并从中接收数据。我想知道我是否可以配置订阅的消息保留期限。我无法在任何地方找到它。谢谢
为了让问题更清楚,我粘贴了我用来创建订阅的代码块:
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 中配置订阅的消息保留期限。创建 Subscription
对象时,可以提供 message_retention_duration field
in your creation request. To do this in Java, use setMessageRetentionDuration
method on Subscription.Builder
对象,如本例(使用 com.google.cloud:google-cloud-pubsub:1.86.0
依赖项):
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();
}
}
}
注意setMessageRetentionDuration
取一个Duration
as parameter, so you might need to use Durations
helper class (fromMillis
method for example) to convert your milliseconds to a protobuf Duration
. Note also that from the REST resource documentation,这个字段:
Cannot be more than 7 days or less than 10 minutes.