MailChimp APIのReadTimeoutエラーについて

はじめに

MailChimp APIで以下のエラーが発生したので、その原因を調査する。

Net::ReadTimeout (Net::ReadTimeout)

Net::ReadTimeoutとは

エラー自体の意味

データを読み出すときにタイムアウトしたときに発生する例外です。タイムアウトまでの時間は Net::HTTP#read_timeout=、 Net::FTP#read_timeout= などで設定します。(Rubyリファレンスマニュアル)

APIドキュメントのStream timeouts

API公式ドキュメント:
https://developer.mailchimp.com/documentation/mailchimp/guides/get-started-with-mailchimp-api-3/#timeouts

A stream timeout can occur if the network code handling the connection has a limit on how long it can pass data. You may see this type of timeout after you’ve made a network socket connection, and are already sending and receiving data.

MailChimpの公式ドキュメントでは、「Stream timeouts」というように表現されている。

Most core network libraries have a default timeout of 30 seconds. Our wrappers default to 300 seconds (five minutes). If you’re sending short calls, you shouldn’t notice an issue. Sometimes even a short call can experience a timeout if the server is under a heavy load.

MailChimpのラッパーでは300秒がタイムアウトのデフォルトとなっている。
サーバ負荷が重い状況では、短いコールでもタイムアウトエラーが発生するらしい。

MailChimp’s API has a 99.9% uptime. We’re rarely offline for planned maintenance, for example as part of major releases.

ただ、MailChimpのサーバの正常稼働時間は99.9%であり、エラーが発生することは稀。

MailChimpサーバの稼働状況

エラーが起きた2018年6月18日のサーバの稼働状況をチェックしてみる。

なお、利用しているMailChimp APIのサーバ名は「US5」。

サーバの稼働状況:
https://status.mailchimp.com/

サーバの稼働状況

該当する18日の12時時点でちょうどサーバが死んでいた。。

Mail Chimp StatusのTwitter

サーバの状況に不具合がある場合、Mail Chimp StatusのTwitterでアナウンスされているので、問題がある場合は、こちらをチェックする。

Mail Chimp StatusのTwitterアカウント:
https://twitter.com/MailChimpStatus

Mail Chimp StatusのTwitterアカウント

今回の件は「接続不具合」があったと説明されており、現在は解決済みとのこと。

ReadTimeoutエラーの対応策

Mail Chimpの言葉を信じれば「めったに起きない不具合」なので、当面はエラーが出た場合に必要な通知を行う実装に留める。

(なお、まじめに全て対応するとすれば、MailChimp APIの実装部分をバックエンド処理(Delayed Jobなど)にして、エラーが出た場合、複数回リトライさせるなどの方法が考えられる。)

実装例(Ruby)


begin
  # MailChimpの処理
rescue Net::ReadTimeout => e
  # 通知を送信する処理
end

ポイント

  • 「rescue Net::ReadTimeout」でエラーハンドリングできる。

Sources

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です