在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 ---
我的想法是我们发送了太多的发布请求......,但我不确定。
答案 0 :(得分:3)
我建议使用原始gRPC代码,但使用具有非常薄的包装器的客户端库。
查看客户端源代码总是对我有帮助,你可以在这里找到c#代码PublisherClient.cs (thin wrapper)
如果您正在使用PublishAsync,它会对消息进行排队/批处理,行为将控制您为客户端提供的设置(请参阅PublisherServiceApiClient以了解如何调整它)。您还可以控制用于在客户端中发送队列的客户端连接数。我建议首先使用批量大小,然后是连接数,直到找到吞吐量的最佳位置。