2

Current I have an application that makes 3rd party API calls, and the data returned is the primary data I display on the webpage.

If the API is down, my website currently goes down (crashes from timeouts, and also eventually brings IIS down).

What options are there for me to take to prevent the website from going down?

I am leaning towards some sort of monitoring service, that if the API is down, I redirect to page explaining my application is also down.

4

4 に答える 4

2

サーキット ブレーカー パターンを使用します。C# での実装に関するアドバイスについては、こちらを参照してください。

そして、Michael Nygard の本この Netflix のブログ投稿を読んで、すばらしいアドバイスを得ることができます。サーキット ブレーカーに関するStackOverflow の質問はこちらです。

于 2013-01-21T16:12:51.603 に答える
2

可能であれば、個人的に情報を保存し、要件に基づいて X 分ごとに同期します。

API がダウンしている場合でも、最後の同期データが残っているため、ダウンタイムはありません。

編集

リアルタイムのデータが必要で、Web サービスが利用できないときにページに転送したい場合は、次のようにすることができます。

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
}

私はこれを使用していますが、うまく機能しているようです。

于 2013-01-21T16:12:23.343 に答える
1

HttpWebRequest.Timeout (MSDN で)を使用して、妥当な時間だけ待機し、例外をキャッチして、「Try again later!」などのメッセージをいつユーザーに配信するかを把握します。デフォルトのタイムアウトは長すぎます (100 秒)。

ビジネスで許可されている場合は、障害が発生した場合に古い/キャッシュされたデータをユーザーに提供することもできます.

于 2013-01-21T16:22:10.973 に答える
0

Web ページ内の AJAX 呼び出しからサーバー側コード (おそらくサードパーティ API を呼び出すと思われます) を呼び出すことができますか (簡単に jquery を使用することもできます)。そうすれば、AJAX 応答からエラーまたはタイムアウトが発生した場合、Web サイトを壊すことなく、それに応じてページを更新できます。

エンドポイントへの通常の AJAX ポーリングをセットアップできます (これにより、ハートビートの API がポーリングされます)。

于 2013-01-21T16:17:31.077 に答える