我正在用 C# 编写一个 gRpc 服务器,如果服务器因任何原因关闭,我想添加自动恢复/重试实现。经过研究,我遇到了拦截器并感到兴奋,但看起来它只支持 Go。我找不到 gRpc C# 的任何类似内容。
如何在 gRpc CSharp 中处理自动恢复,或者是否有任何类似的概念(例如我们可以使用拦截器)?
EDIT- 在 GRPC c# 中,有没有办法检查服务器是否正在运行或可用?
我不确定这是否是 API 的良好实践和正确用法,但我会使用客户端的 Channel 实例来实现这一点。因此,在客户端类中,我将公开 IsReady 方法,用于尝试连接并随后检查通道的状态。这是一个代码示例:
public bool IsReady()
{
channel.ConnectAsync();
return channel.State == ChannelState.Ready;
}
您还可以实现此方法的异步版本,并传递连接截止日期:
public async Task<bool> IsReadyAsync(DateTime? deadline)
{
try
{
await channel.ConnectAsync(deadline: deadline);
}
catch (TaskCanceledException)
{
return false;
}
return channel.State == ChannelState.Ready;
}
ConnectAsync 方法请求通道连接服务而不启动 RPC。一旦通道状态为就绪,返回的任务就完成。如果到达截止时间,或者通道进入 Shutdown 状态,则任务将被取消。因此,您可以尝试使用它来实现您的目标,或者使用提供的示例(如果它们适合您)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)