2013-07-01 95 views
6

Amazon SESで電子メールを送信していますが、障害発生時に再試行を正しく処理する方法が不思議です。Amazon SESへの二重提出を避けるには?

SendEmailアクションにはPOSTリクエストが発行されますが、タイムアウトが発生するとします。メッセージが送信されたかどうかを知る方法はありません。

電子メールごとに一意の識別子を送信することは可能ですか?この電子メールを送信するように再試行し、SESにメールを送信するか、すでに送信済みであることを通知しますか?

それ以外の場合は、ネットワークエラーが発生した場合に、電子メールを2回送信する危険性を選択し、電子メールを一切送信しないようにする必要があります。

+0

あなたは、現時点では電子メールを送信するためにAWS SDKを使用していますか? PHP SDKを使用していて、SendEmailがトリガーされた後、電子メールが送信されたかどうかを示す応答があります(https://github.com/aws/aws-sdk-php/blob/master/src/をチェックしてください)。 Aws/Ses/Resources/ses-2010-12-01.php)。その後、私はその結果を記録することができ、次のことはかなりストレートです –

+0

@Hieuはい、私はそうし、はいAmazonは送信のステータスを返します。私の要点は、HTTP要求が応答を受け取らない、またはPHPが致命的なエラーなどで終了するなどの理由でメールが送信されない*場合は、送信する必要があるかどうかを知る手段がありません。もう一度メールを送ってください。私は保留中の電子メールをバッチ処理しているcronを持っています。私は '既にID 123の電子メールが送られていますか? – Benjamin

+1

Hmmでは、SDKでGetSendStatistics()メソッドを使用して使用統計情報を取得できます。詳細については、「Amazon SES APIを使用した使用統計の監視」(http://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-usage-statistics.html)を参照してください。希望する;) –

答えて

6

SendRawEmailのSES API Referenceによれば、要求の一部として提供する唯一のパラメータは、受信者のリスト、電子メール本文、および送信元アドレスです。残念ながら、SESからの応答ではなくタイムアウトが発生した場合は、はありません。その特定の電子メールが送信されたかどうかを知るには、があります。私はそれがとても怒っていることを知っています。私はそのような状況にいるときも嫌です。

doしかし、このジレンマの最も実用的な解決策を見つけることにはいくつかの選択肢があります。再試行しないで、未送信のメッセージが重複したメッセージよりも優れていると仮定するようにブランケットの決定を行うことができます。重複した電子メールが完全に受け入れられるというブランケットの決定をすることもできます。しかし、私が推奨しているアプローチは、学問的には満足していますが、実用的で中間的なものです。私に説明させてください。

新しいサービスと統合して処理する方法がわからないが、期待していないようなケースが頻繁に発生する場合は、最も多くの情報を収集し、平均時間。ローマは一日で建てられなかったし、あなたのクラウドサービスはあなたがそれをオンにした最初の日には完全には機能しません。代わりに、タイムアウトが発生したときにログに記録し、後でそのメールを再送信する必要があるものはすべて保存してください。

ここで、コーディングがすべて完了し、統合テストを行い、本番環境でサービスを有効にしたとします。最初の日に10万通のメールを送信しようとします。 1000回のタイムアウトが発生した場合、本当に奇妙なことが起こり、ネットワークを調査する必要があることがわかります!代わりに、最初の日に2回目のタイムアウトが0回、7回目に70,000回の試行のうちタイムアウトが1回しかなかった場合はどうなりますか?適切であれば、その1人の顧客に電話して "こんにちは、ご苦労様申し訳ありませんが、本当に信頼性があり、技術的な問題がありましたので、[XYZ]の電子メールの領収書を受け取りました。 "彼らがいいえと答えるなら、戻ってコードを変更してタイムアウトが起きたら、おそらく動作することがわかってから数秒待ってから再試行するようにしてください。間にあるものについては同じアイデア。

ここでのポイントは、あなたが謎にあなたの人間の知性を適用することです。私は未知のものを外に出そうとしないほうがしばしば簡単だと分かった。何が起こったのかを処理できるように自分自身を設定し、賢明なことは、問題が実際にどのように見えるかを知るときです。

(あなたが楽しむことができます。このblog post - 他の誰かによって書かれた - 。「エッジケースを処理していない」程度)

+0

興味深い回答、ありがとうございます。 – Benjamin

関連する問題