Hatena::Groupstudyroom

文::字

2014-07-11

Amazon SQS、リトライ 00:32  Amazon SQS、リトライ - 文::字 を含むブックマーク

Amazon SQS がシンプルかつ奥深いことについて、主にリトライの側面から書く。

Amazon SQS を使うとプログラム側でのリトライが不要になる。下記のようなシンプルなコードを書けば、process というメソッドで例外が発生した場合でも、プログラムリトライ処理を書かなくても VisibilityTimeout のデフォルト値によりメッセージが 30 秒後に復活し、リトライ処理を行うことができる。

require 'aws-sdk'

queue = AWS::SQS.new.queues.create('NoNeedToRetry')

loop do
  if message = queue.receive
    begin
      process(message)
    rescue
      next
    end
    message.delete
  end
end

HTTP レベルにはなるが、そもそも kimoto/retry-handler のような仕組みが不要となるし、卜部昌平のあまりreblogしないtumblr - RabbitMQ と再送について のように RabbitMQ ではかなり面倒くさい処理がうまく抽象化されているように思う。RabbitMQ にはキュー内のメッセージが復活するまでの時間を制御するような機能はない (amazon web services - RabbitMQ Visibility Timeout - Stack Overflow 参照、あったら申し訳ありません)

Amazon SQS の真髄は VisibilityTimeout であり、この VisibilityTimeout によるリトライを複数のクライアント分散させたり、DelaySeconds 等の他の機能と組み合わせることにより、かっこいい分散システムの構築が可能になると思う。



require.js の define に書くのがめんどい感じは java の import に似ているという話をした 16:43  require.js の define に書くのがめんどい感じは java の import に似ているという話をした - 文::字 を含むブックマーク