2017-01-13 9 views
3

私のアプリケーション(APPと呼ぶ)が正常に受信されるまでAmazon SNSに通知を送信する必要があるユースケースがありますが、メッセージの最大有効期間は1時間。AWS SNSメッセージの有効期間

APPがクラッシュし、1時間以内にライブを取得できないとします。私はまだ何とかこれらのメッセージを受け取る必要があります。 SQSから

  1. APPの世論調査:

    は、それを実装するための複数の方法があります。私はAPPとAWSの間にあまりにも多くのネットワークトラフィックを生成するので、このオプションは気に入らない。

  2. SNSは、APPとSQSの両方に通知を送信します。 APPがメッセージを受信することができれば、それは即座にSQSから削除されます。 APPがメッセージを受信できない(クラッシュした)場合、起動時にSQSからメッセージをロードしてキューをクリーンにすることができます。
  3. メッセージングサービスとしてのAWSラムダコード。ラムダコードが失敗すると、メッセージはSQSデッドレターキューにプッシュされ、それ以外の場合はキューがクリーンに保たれます。 Lambaコードの更新を処理することはあまりにもオーバーヘッドであり、可能であれば純粋なAWSでこの問題を解決するのはクールです。

完璧な解決策は、SNSメッセージの無限タイムアウトを設定することですが、Amazonがサポートしていないようです。

この問題を解決するにはどうすればよい解決策だと思いますか?私は何かを逃したか?

+0

非awsソリューションに依存する場合は、メッセージ履歴(保持)プラグイン付きのpubnubを使用できます。 – hjpotter92

+0

ありがとうhjpotter92。高度にセキュリティ保護されたソリューションであるため、Amazon以外の第三者にデータを送信しないことをお勧めします。 –

答えて

3

1つの選択肢は、あなたのアプリを呼び出すラムダにSNSからメッセージを配信させることです。ラムダがあなたのアプリにメッセージを配信できない場合、SNSがラムダを再試行するように失敗します。デッドレターキュー(SQS)でラムダを構成すると、失敗した場合にメッセージがキューに送られます。最後に、デッド・レター・キューをチェックし、ラムダ呼び出しを再試行するスケジュールで別のラムダを実行させることができます。それが失敗した場合、メッセージをデッド・レター・キューに戻しておくだけです。

あなたのアプリが利用可能な場合、この方法でメッセージがすぐに配信されます。アプリが利用できない場合、後で配信を再試行します。

関連する問題