12

問題を詳しく説明する前に、私の現在のアプローチについて説明します。

setInterval() を実行する js スクリプトがあります。間隔ごとに、SQS を呼び出してキューからメッセージを取得します。メッセージがあれば処理します。
そのため、プロセスを強制終了するまで無限に実行されます。

以前にノードサーバーも構築しました( nodejs.org の例を使用)

だから、私が不思議に思っているのは、 setInterval を定期的に実行する代わりに.. SQS に新しいメッセージがある場合、イベントを発生させてメッセージを処理する方法はありますか?

4

4 に答える 4

8

いいえ。SQS からのメッセージをリクエストする必要があります。

本当にプッシュ通知が必要な場合は、SNSをご覧ください。メッセージをキューに追加した後、SQS をポーリングするためのヒントをサーバーに与えたい場合、SNS はうまく機能します。

于 2011-02-02T04:00:17.490 に答える
3

SQS は通知を提供しませんが、SQS に新しいメッセージがある場合、メッセージを作成したものは何でも node.js にヒットし、ポーリングを数分間オンにすることができます。キューに何が入るかを制御できない場合がありますが、制御できる場合は、node.js をトリガーしてキューのポーリングを開始することもできます。

コストのためにポーリングが心配な場合は、私が行ったことを行うことができます。ポーリング時間を動的に変更します。SQS キューが 5 秒ごとにポーリングされています。ノードがメッセージを検出すると、すぐにポーリング時間を数秒間 200 ミリ秒まで下げます。キュー内のメッセージが検出されない場合、5 秒のポーリングが再びヒットするまで、空のリクエストごとに 50 ミリ秒遅くなります。

その最初のリクエストは遅くなり、処理できない可能性があります。これに対抗するために、ポーリング時間を数分ごとにランダムにスピードアップさせています。少数のノードのポーリングでは、応答時間は通常非常に高速です。

于 2011-10-12T16:23:01.720 に答える