在我的应用程序中,当用户添加对象时,它会向第三方站点执行一个API请求。对于单个用户,可以立即发送请求。但API调用受限于每秒3次。因此,当用户的qtt增加时,它将是一个麻烦。我建议ActiveJob + Sidekiq将完成工作,但是如何在工作完成后获得结果? 我的一个用户代码:
Yii::$app->response->format = Response::FORMAT_JSON;
如何使用controller.rb
def create
wall = get_request(code_constructor({params for constructor },[]))
end
module CommonMods
def code_constructor(meth_name, meth_params, code)
param_str = []
meth_params.each_pair do |name, value|
param_str << '"' + name.to_s + '":'+ value.to_s
end
param_str = param_str.join(',')
code << meth_name + '({' + param_str + '})'
end
def get_request(code)
i = 0
result = []
while i < code.size
part_code = code.slice(i, i + 25)
if part_code.size >1
part_code = part_code.join(',')
else
part_code = part_code[0]
end
url='https://api.site.com/method/'
uri = URI.parse(url)
parameters = {'code' => "return [#{part_code}];"}
response = Net::HTTP.post_form(uri, parameters)
result = result + JSON.parse(response.body)['response']
i += 25
end
result
end
end
param在队列中执行get_request方法并继续在控制器中收到响应?或者它可能有不同的方式来制作它?