我有一个rake任务,在cron作业上通过Twilio发送大量消息(使用他们的Twilio REST客户端):
def self.twilio_client
Twilio::REST::Client.new(ENV['TWILIO_ACCOUNT_ID'], ENV['TWILIO_TOKEN'])
end
scheduled_messages.each do |scheduled_message|
MessagesSender.twilio_client.messages.create(
:to => scheduled_message.phone_number,
:messaging_service_sid => ENV['TWILIO_MSID'],
:body => scheduled_message.body
)
end
它完全正常。但是,我的任务等待来自Twilio的每个响应,并且在前一个完成之前不会进行到下一个响应。当我使用Twilio的消息服务时,我想我没有使用我的多个号码同时发送。因此,当我必须发送10000条消息时,需要花费很长时间才能将它们全部发送出去。
如何加快流程?是否有可能不等待回应?我是否需要在线程中使用消息传递服务?
由于
答案 0 :(得分:1)
Twilio开发者传道者在这里。
即使您使用多个号码使用消息服务发送消息,您也会受到速率限制。当你发送了很多信息时,它总是要花很长时间。
我建议设置后台作业来处理所有消息。这有几个好处:您可以调整用于获得最佳性能的工作者数量,如果中间的消息失败,剩余的一批消息仍将被发送(不是&# 39;以及当前代码的情况。)
我写了一篇关于如何设置Rails' ActiveJob for sending messages in the background的博客文章。您也可以使用像Textris这样的宝石来处理它。
如果有帮助,请告诉我。
答案 1 :(得分:0)
根据您对Twilio的计划,您的费率受到限制。 https://www.twilio.com/help/faq/twilio-basics/how-many-calls-and-sms-messages-per-second-can-my-twilio-account-make?baseUrl=%2Fhelp%2F
您最好的选择是设置延迟处理,例如延迟作业,然后只是延迟每次发送,以便您的队列处理它。