如何解决当gRPC客户端在方法上抛出RpcException时,如何获取内部错误的innerException
我想使用Polly.net在.NET Core 3.1 gRPC客户端/服务器之间添加弹性,以处理退避重试策略。
我对gRPC的RpcException
不满意。我想知道是否有更好的方法来检测强制关闭的远程连接。在客户端或gRpc服务重启后启动grpc时会发生这种情况。
内部异常是null
,找到异常的唯一方法是解析错误消息-不如我所希望的那样可靠。
如何在RpcException
中获得Win32异常?
private static IAsyncPolicy RetryTransientException()
{
return Policy
.Handle<RpcException>(rpcException => IsTransient(rpcException.StatusCode))
.Or<RpcException>(IsRemoteForcedConnection)
.WaitAndRetryForeverAsync(
(retryAttempt,ctx) => TimeSpan.FromSeconds(Math.Pow(2,retryAttempt)),(exception,retries,timeSpan,context) =>
{
context.GetLogger()?.information(exception,"[onRetry] {0} Transient error attempt {1} to reconnect with gRpc server.",context.PolicyKey,retries);
}
)
.WithPolicyKey(PolicyNames.PersistentClientStream + "-waitandretrytransienterrors");
}
private static bool IsTransient(StatusCode status)
{
if (status == StatusCode.Unavailable)
return true;
if (status == StatusCode.DeadlineExceeded)
return true;
return false;
}
private static bool IsRemoteForcedConnection(RpcException rpcException)
{
return rpcException.StatusCode == StatusCode.Internal
&& rpcException.Message.Contains("System.Net.sockets.socketException (10061)");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。