在 Ruby Net::HTTP.start 中为服务调用设置 read_timeout

2024-05-25

我想在我的 ruby​​ 代码中覆盖服务调用的默认超时。 我打开连接如下。

res = Net::HTTP.start(@@task_url.host, @@task_url.port) do |http|
    http.get("/tasks/#{task_id}")
end          

我尝试将 read_timeout 时间设置如下,但随后我在代码中遇到了 NoMethodError 异常。

res = Net::HTTP.start(@@task_url.host, @@task_url.port)
res.read_timeout = 10
res do |http|
    http.get("/tasks/#{task_id}")
end

建议我应该如何设置 read_timeout。我希望在全局某个地方设置 read_timeout ,以便我可以通过 Net::HTTPP.start() 对所有服务调用使用该超时


如果你使用Ruby 1.8你必须使用Net::HTTP.new:

http = Net::HTTP.new(host, port)
http.read_timeout = 10

response = http.get("/")    
# or intead of above line if you need block
# http.start do
#   response = http.get("/")
# end

如果你看一下源代码 http://www.ruby-doc.org/stdlib-1.8.7/libdoc/net/http/rdoc/Net/HTTP.html#method-c-start of Net::HTTP.start,你会看到::start正在打电话::new with #start method:

# File net/http.rb, line 439
def HTTP.start(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil, &block) # :yield: +http+
  new(address, port, p_addr, p_port, p_user, p_pass).start(&block)
end

>= 红宝石 1.9

您可以在中设置read_timeout选择参数 http://www.ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#method-c-start: start(address, ..., opt, &block)

像这样:

res = Net::HTTP.start(host, port, :read_timeout => 10)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Ruby Net::HTTP.start 中为服务调用设置 read_timeout 的相关文章

随机推荐