6

XML を Web サービスにポストする小さなアプリケーションを開発しています。これは、Net::HTTP::Post::Post を使用して行われます。ただし、サービス プロバイダーは再接続を使用することを推奨しています。

次のようなもの: 最初の要求が失敗する -> 2 秒後に再試行する 2 番目の要求が失敗する -> 5 秒後に再試行する 3 番目の要求が失敗する -> 10 秒後に再試行する ...

それを行うための良いアプローチは何ですか?次のコードをループで実行し、例外をキャッチして、しばらくしてから再度実行しますか? または、それを行うための他の賢い方法はありますか?もしかしたら、Net パッケージには、私が気付いていない機能が組み込まれているのでしょうか?

url = URI.parse("http://some.host")

request = Net::HTTP::Post.new(url.path)

request.body = xml

request.content_type = "text/xml"


#run this line in a loop??
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}

ありがとうございます、いつも応援ありがとうございます。

マット

4

2 に答える 2

15

これは、Ruby が役立つ稀な機会の 1 つですretry。これらの行に沿ったもの:

retries = [3, 5, 10]
begin 
  response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}
rescue SomeException # I'm too lazy to look it up
  if delay = retries.shift # will be nil if the list is empty
    sleep delay
    retry # backs up to just after the "begin"
  else
    raise # with no args re-raises original error
  end
end
于 2009-07-29T18:45:09.873 に答える