【发布时间】:2016-12-06 22:26:53
【问题描述】:
我为支付 API 编写了一个消费者。我的代码只是发出一个 POST 请求并从 API 获得响应。我已经用 Net::HTTP 实现了,这里是相关的代码行:
http = Net::HTTP.new(uri.host, 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(params)
response = http.request(request)
这已经工作了多年,但是,最近当 API 处于压力之下时,一些请求已经超时。 API 维护者提出了这样的解释:
我们在刷新 HTTP 响应后将数据同步传递给 RabbitMQ。显然,一些 HTTP 库在程序继续在消费者端之前等待连接关闭,我们认为这正在发生。请重新配置您的消费者不要等待关闭,而是在刷新响应后立即继续。
我不确定 Net::HTTP 是如何实现的,以及它是否真的在刷新响应时等待关闭。文档没有说任何关于它的信息,也没有设置来控制任何这些。更糟糕的是,我真的不知道如何模拟这个。
非常欢迎任何想法!
【问题讨论】: