通过grpc c#客户端调用_publisherClient.PublishAsync时如何设置RetryPolicy(对于PubSub)

Posted

技术标签:

【中文标题】通过grpc c#客户端调用_publisherClient.PublishAsync时如何设置RetryPolicy(对于PubSub)【英文标题】:How to set RetryPolicy when calling _publisherClient.PublishAsync via grpc c# client (for PubSub) 【发布时间】:2020-11-13 08:40:42 【问题描述】:

我们使用 c# 和 Google.Cloud.PubSub.V1 nuget 将消息一一发布到 google pubsub 服务到给定主题 每隔几分钟我们就会收到错误消息

Grpc.Core.RpcException: Status(StatusCode=Unknown, Detail="Stream removed")

需要设置吗

重试策略

要解决这个问题? (我在github issue python1、python 2 和github issue C# 上看到手动进行客户端重试并不能解决这个问题)所以; 通过grpc c#客户端调用_publisherClient.PublishAsync时如何设置RetryPolicy(用于PubSub)

否则应该通过启用来解决此问题

new ChannelOption("grpc.keepalive_permit_without_calls", 1)

“Stream removed”错误是什么意思?

RpcException - Status Codes(错误代码)

【问题讨论】:

我目前处理这个问题的唯一方法是在客户端代码中重试;重试 4 次,延迟 10 秒;它仍然可能失败,这意味着要么进一步增加延迟重试或进行更多尝试..我认为这不是一个好方法.. 相关:***.com/questions/45257255/… 【参考方案1】:

客户端库通常将用户从这些较低级别的问题中抽象出来。

我同意你的观点,C# 库本身应该重新建立流并根据需要重试发布。如果发布者的行为不符合预期,或者您认为应该在底层连接上设置属性,请在https://github.com/googleapis/google-cloud-dotnet/issues 提出问题

【讨论】:

【参考方案2】:

这是由于客户端库生成期间的错误导致重试配置未应用。 在此提交问题以修复它:https://github.com/googleapis/google-cloud-dotnet/issues/5225

更新:此问题现已在 github (https://github.com/googleapis/google-cloud-dotnet/pull/5226) 中修复,预计将于下周(2020-08-03 周)发布。

【讨论】:

如何在新包(Google.Cloud.PubSub.V1.2.1.0)中配置重试尝试和调用超时?

以上是关于通过grpc c#客户端调用_publisherClient.PublishAsync时如何设置RetryPolicy(对于PubSub)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone Swift gRPC 客户端从 Windows C# gRPC 服务器获取“连接被拒绝”

Asp.net core 通过grpc调用python

C# 使用 grpc 问题汇总

使用 FieldMask 提高 C# gRpc 服务性能 #yyds干货盘点#

gRPC 间歇性地具有高延迟

gRPC C#学习