使用resque

时间:2017-01-13 05:33:25

标签: ruby-on-rails google-cloud-messaging resque

我正在尝试使用GCM和resque向用户发送通知。目前它正在向所有用户发送消息,并且由于用户太多,它会加入服务器。所以我想要的是每分钟向1000个用户发送消息。

有没有办法为resque设置它?

我有一件事情在于循环遍历所有用户,然后将用户批量为1000.虽然仍然在循环内部使超时为60秒。 但我认为这种做法很糟糕。

1 个答案:

答案 0 :(得分:1)

您可以尝试:

  1. 使用索引批量查找用户,因此您可以使用索引来计算延迟时间。
  2. 使用wait选项延迟作业而不是超时。
  3. User.find_in_batches.with_index do |group, index|
      puts "Processing group ##{index}"
      GCMJob.set(wait: index.minutes).perform_later(group.ids) # each batch will have 60 seconds in between
    end
    
    class GCMJob < ActiveJob::Base
      def perform(user_ids)
        users = User.where(id: user_ids)
        users.map(&:send_gcm_message)
      end
    end