本文介绍了检查GRPC服务器是否在C#中运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用C#编写一个GRPC服务器,我想在服务器因任何原因停机时添加自动恢复/重试实现。经过研究,我发现了拦截器,并感到兴奋,但看起来它只支持围棋。我找不到任何类似的GRPC C#。

如何在GRPC CSharp中处理自动恢复?我们是否可以使用类似于侦听器的类似概念?

编辑-在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的情况下连接服务。一旦通道状态就绪,返回的任务即完成。如果到达截止日期,或者通道进入关闭状态,则取消该任务。因此,您可以利用这一点来实现您的目标,或者使用所提供的示例(如果它们对您有效)。

这篇关于检查GRPC服务器是否在C#中运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 15:27