簡體   English   中英

GCP Pub/Sub 客戶端、GrpcSubscriberStub、超時

[英]GCP Pub/Sub Client, GrpcSubscriberStub, Timeout

我正在嘗試使用 GrpcSubscriberStub 進行“同步拉取”,如示例https://cloud.google.com/pubsub/docs/pull

SubscriberStubSettings subscriberStubSettings =
    SubscriberStubSettings.newBuilder()
        .setTransportChannelProvider(
            SubscriberStubSettings.defaultGrpcTransportProviderBuilder()
                .setMaxInboundMessageSize(20 << 20) // 20MB
                .build())
        .build();

try (SubscriberStub subscriber = GrpcSubscriberStub.create(subscriberStubSettings)) {
  // String projectId = "my-project-id";
  // String subscriptionId = "my-subscription-id";
  // int numOfMessages = 10;   // max number of messages to be pulled
  String subscriptionName = ProjectSubscriptionName.format(projectId, subscriptionId);
  PullRequest pullRequest =
      PullRequest.newBuilder()
          .setMaxMessages(numOfMessages)
          .setReturnImmediately(false) // return immediately if messages are not available
          .setSubscription(subscriptionName)
          .build();

  // use pullCallable().futureCall to asynchronously perform this operation
  PullResponse pullResponse = subscriber.pullCallable().call(pullRequest);
  List<String> ackIds = new ArrayList<>();
  for (ReceivedMessage message : pullResponse.getReceivedMessagesList()) {
    // handle received message
    // ...
    ackIds.add(message.getAckId());
  }
  // acknowledge received messages
  AcknowledgeRequest acknowledgeRequest =
      AcknowledgeRequest.newBuilder()
          .setSubscription(subscriptionName)
          .addAllAckIds(ackIds)
          .build();
  // use acknowledgeCallable().futureCall to asynchronously perform this operation
  subscriber.acknowledgeCallable().call(acknowledgeRequest);
  return pullResponse.getReceivedMessagesList();
}

但是我不知道如何使用選項“setReturnImmediately(false)”設置拉取超時。

你能幫助我嗎?

要更改拉取超時,您需要修改SubscriberStubSettings

例如,將 pull 的總超時時間設置為 30 秒:

SubscriberStubSettings.Builder subscriberStubSettingsBuilder =
    SubscriberStubSettings.newBuilder();
subscriberStubSettingsBuilder
    .pullSettings()
    .setRetrySettings(
        subscriberStubSettingsBuilder.pullSettings().getRetrySettings().toBuilder()
            .setTotalTimeout(Duration.ofSeconds(30))
            .build());
SubscriberStubSettings subscriberStubSettings = subscriberStubSettingsBuilder.build();

這是基於此處的 SubscriberStubSettings 文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM