2016-08-07 4 views
0

私は、複数のワーカーが同じキューにアクセスしてそれらが操作するファイルに関する情報を取得する必要があるプロジェクトに取り組んでいます。ファイルのサイズは、単なるメガバイトから数百ギガバイトまでです。この理由から、可視性のタイムアウトは意味をなさないと思われます。なぜなら、どれくらい時間がかかるかわからないからです。私はいくつかの方法を持っていますが、より良い方法があれば教えてください。他のワーカーが現在処理中のメッセージにアクセスできないようにするにはどうすればよいですか?

  1. メッセージは、元のキューから削除され、キューを「待っている」 に入れます。プログラムがファイルの処理を終了すると、 が削除され、それ以外の場合はメッセージがキューから削除され、 が元のキューに戻されます。

  2. メッセージIDはデータベースで確認されます。メッセージIDが の場合は無視されます。それ以外の場合、プログラムは メッセージの処理を開始し、メッセージIDをデータベースに挿入します。

ありがとうございます!

答えて

1

デフォルトで提供されるSQSタイムアウトを使用しますが、ChangeMessageVisibilityを利用してください。

あなたはいくつかの方法でタイムアウトを指定することができます。

キューが作成され
  • (デフォルトのタイムアウト)
  • メッセージがSQSと拡張に戻って労働者コールを有することにより
  • 取り出されますタイムアウト

適切な処理時間がわからない場合は、のデフォルト値はほとんどの状況に適していますが、大きすぎてものが不必要に遅れることはありません。

次に、従業員をに変更して、ChangeMessageVisiblityを定期的にSQSに呼び出すと、タイムアウトが延長されます。ワーカーが死亡した場合、メッセージは拡張されなくなり、別のワーカーが処理するキューに再び表示されます。

参照:MessageVisibility documentation

関連する問題