如何将应用程序与第三方API分离以处理停机时间?

时间:2013-01-21 16:10:16

标签: c# asp.net api design-patterns

目前我有一个进行第三方API调用的应用程序,返回的数据是我在网页上显示的主要数据。

如果API关闭,我的网站目前会出现故障(从超时崩溃,最终导致IIS崩溃)。

我可以选择哪些方法来防止网站出现故障?

我倾向于某种监控服务,如果API关闭,我会重定向到页面解释我的应用程序也会关闭。

4 个答案:

答案 0 :(得分:2)

如果可能的话,我会亲自存储信息,并根据您的要求每隔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
}

我使用它,它似乎运作良好。

答案 1 :(得分:2)

使用Circuit Breaker pattern。有关C#中实现的一些建议,请参阅here

read Michael Nygard’s bookthis Netflix blog post提供了很好的建议,这里是断路器的StackOverflow question

答案 2 :(得分:1)

使用HttpWebRequest.Timeout (on MSDN)等待一段合理的时间,捕获异常以了解何时向用户提供类似“稍后再试!”等内容。默认超时也是如此很长(100s)。

如果您的企业允许,您甚至可以在发生故障时向用户提供旧/缓存数据。

答案 3 :(得分:0)

您是否可以在网页中的AJAX调用中调用您的服务器端代码(我认为它称为第三方API)(可以使用jquery轻松实现)。这样,如果您从AJAX响应中收到错误或超时,您可以相应地更新您的页面,而不会破坏您的网站。

您可以为您的终端设置常规的AJAX轮询(然后轮询API以获取心跳)