Google PubSub 同时发布请求

Google PubSub Simultaneous Publish Requests

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

如果这是真的,pubsub 客户端如何控制可以同时创建的发布请求的数量?是否有硬性限制,或者如果创建的请求过多会出现错误?这是拥有异步发布者的预期用途,还是仅仅是允许其他非发布 activity 发生?

虽然这个问题适用于任何客户端,但我们特别遇到了 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 ---

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

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

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

如果您正在使用 PublishAsync queues/batch 消息,则行为由您提供给客户端的设置控制(有关如何调整它,请参阅 PublisherServiceApiClient)。您还可以控制用于在客户端中发送队列的客户端连接数。我建议先调整批处理大小,然后调整连接数,直到找到吞吐量的最佳点。