現在、ノードhapijsフレームワークを使用してREST APIを作成しています。 APIはHerokuにデプロイされています。Node.jsのHeroku H12タイムアウトエラー
APIにGETエンドポイントがあり、サードパーティからデータを取得するget要求を行い、応答を送信する前にデータを処理します。この特定のエンドポイントは時折タイムアウトします。エンドポイントがタイムアウトすると、HerokuはH12エラーを返します。タイムアウトになると、そのエンドポイントへの後続要求によってH12エラーが発生します。私は、そのエンドポイントを再び動かすために、Heroku上でアプリケーションを再起動する必要があります。 APIの他のエンドポイントは、このエラーによって何らかの影響を受けず、エラーが発生した後も正常に動作します。
私のデバッグプロセスとログを見て、サードパーティAPIから応答が返されず、エラーが発生することがあります。
私は問題を試してみて、解決するために、以下のソリューションを試してみた:
私が要求を行うために要求ライブラリを使用しています。したがって、私は要求に渡されたオプションの一部として5000ミリ秒のタイムアウトを設定しようとしました。タイムアウトが発生し、エンドポイントは要求に関連するタイムアウトエラーを送信します。これは、エンドポイントへの後続のリクエストが機能するため、私が望むような動作です。ただし、要求のタイムアウトが発生しないが、HerokuがH12エラーを返すこともあります(常にHerokuのデフォルトである30秒後)。その後、そのエンドポイントへのその後の要求はH12エラーを返します(30秒後も)。ある種のプロセスがHeroku上で「スタック」し、アプリケーションを再起動するまで終了しないようです。
タイムアウトをhapi.jsルート設定オブジェクトに追加しようとしました。私は上記と同じ結果を得ます。
私は引き続き調査を行い、問題がhereとhereの説明と関係していると考えています。それは、HerokuワーカーにSIGKILLを送ることができるアプリサーバーレベルでタイムアウトを設定するようなことが、そのトリックを行うかもしれないようです。 Rubyではかなり簡単ですが、Nodeでこれを行う方法に関する多くの情報は見つかりません。
いずれの洞察もありがとうございます。第三者に依頼する際にタイムアウトが発生する可能性があることを認識しています。それは問題ではありません。問題は、エンドポイントがタイムアウトした後にHerokuに「スタック」して応答しなくなることです。
ありがとうございました!
これがあなたを助けている場合、受け入れ答えとしてそれをマークしてください。ありがとう! – lwdthe1
これは私のH12タイムアウトの問題を修正したものです。ありがとう! –