我已經爲支付API編寫了一個消費者。我的代碼只是發出一個POST請求,並從API獲取響應。我實現了與網:: HTTP,這裏的代碼中的相關行: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是如何實現的,它是否真的在響應被刷新時等待關閉。文檔沒有提及任何內容,也沒有設置來控制這些。更糟糕的是,我真的不知道如何模擬這個。
任何想法都非常歡迎!