【问题标题】:Google PubSub Simultaneous Publish RequestsGoogle PubSub 同时发布请求
【发布时间】:2018-05-29 23:04:39
【问题描述】:

在 Google PubSub 中,可以异步调用来自客户端的发布调用。因此,我认为有可能同时触发多个发布请求并将其发送到服务器,尤其是在批处理阈值太低的情况下。

如果是这样,pubsub 客户端如何控制可以创建的同时发布请求的数量?如果创建了太多请求,是否存在硬限制或可能发生的错误?这是使用异步发布者的预期用途,还是只是为了允许其他非发布活动发生?

虽然这个问题适用于任何客户端,但我们特别遇到了 C# 客户端的问题,并且间歇性地收到以下错误:

 Grpc.Core.RpcException: Status(StatusCode=DeadlineExceeded, Detail="Deadline Exceeded")
 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
 at Google.Api.Gax.Grpc.ApiCallRetryExtensions.<>c__DisplayClass0_0`2.<<WithRetry>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---

我的想法是我们发送了太多发布请求...,但我不确定。

【问题讨论】:

    标签: google-cloud-pubsub


    【解决方案1】:

    我建议使用原始 gRPC 代码,但使用具有非常薄包装器的客户端库。

    查看客户端源代码总是对我有帮助,你可以在这里找到c#代码PublisherClient.cs (thin wrapper)

    如果您使用的是 PublishAsync,它无论如何都会对消息进行排队/批处理,行为由您提供给客户端的设置控制(请参阅 PublisherServiceApiClient 了解如何调整它)。您还可以控制用于发送客户端中的队列的客户端连接数。我建议首先使用批量大小,然后是连接数,直到您找到吞吐量的最佳位置。

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2019-05-06
      • 2018-06-20
      • 2018-02-23
      • 1970-01-01
      • 2021-09-27
      • 2020-08-06
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多