目前我有一个应用程序进行 3rd 方 API 调用,返回的数据是我在网页上显示的主要数据。
如果 API 出现故障,我的网站当前会出现故障(因超时而崩溃,并最终导致 IIS 停机)。
我可以采取哪些措施来防止网站宕机?
我倾向于某种监视服务,如果 API 关闭,我会重定向到解释我的应用程序也关闭的页面。
目前我有一个应用程序进行 3rd 方 API 调用,返回的数据是我在网页上显示的主要数据。
如果 API 出现故障,我的网站当前会出现故障(因超时而崩溃,并最终导致 IIS 停机)。
我可以采取哪些措施来防止网站宕机?
我倾向于某种监视服务,如果 API 关闭,我会重定向到解释我的应用程序也关闭的页面。
如果可能的话,我会亲自存储信息并根据您的要求每 X 分钟同步一次。
如果 API 已关闭,那么您仍然拥有最后一批同步数据,这意味着没有停机时间。
编辑
如果您需要实时数据并希望在网络服务不可用时转发到页面,那么您可以执行以下操作:
internal bool WebServiceAvailable()
{
bool Result = false;
string Url = {ENTER URL}
try
{
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(Url);
Req.Timeout = 3000;
using (HttpWebResponse Rsp = (HttpWebResponse)Req.GetResponse())
{
if (Rsp.StatusCode == HttpStatusCode.OK)
{
Result = true;
}
}
}
catch (WebException) { }
return Result;
}
if (!WebServiceAvailable()
{
//Redirect to Not Available page
}
我使用它,它似乎运作良好。
使用断路器模式。有关在 C# 中实现的一些建议,请参见此处。
阅读 Michael Nygard 的书和这篇Netflix 博客文章以获得很好的建议,这里是关于断路器的StackOverflow 问题。
使用HttpWebRequest.Timeout
(在 MSDN 上)等待一段合理的时间,捕获异常以了解何时向用户提供“稍后再试!”等内容。默认超时时间太长(100 秒)。
如果您的业务允许,您甚至可以在发生故障时向用户提供旧的/缓存的数据。
您能否从您的网页中的 AJAX 调用中调用您的服务器端代码(我认为它调用了第 3 方 API)(也许使用 jquery 方便)。这样,如果您从 AJAX 响应中收到错误或超时,您可以相应地更新您的页面,而不会破坏您的网站。
您可以为端点设置常规 AJAX 轮询(反过来轮询 API 以获取心跳)