2017-01-13 6 views
0

GCM을 사용하여 사용자에게 알림을 보내려 고합니다. 현재 모든 사용자에게 메시지를 보내고 너무 많은 사용자가 있기 때문에 서버를 급증시킵니다. 그래서 내가 접근하려고하는 것은 매분 1000 명의 사용자에게 메시지를 보내는 것입니다.resque를 사용하여 1 분 간격으로 알림 보내기

resque를 설정하는 방법이 있습니까?

모든 사용자가 루프를 통과 한 후 1000 번 사용자를 배치한다는 점에 유의해야합니다. 루프 내부에는 여전히 60 초 동안 제한 시간이 있습니다. 하지만이 방법이 나쁘다고 생각합니다.

+0

당신이 GCM 항목 메시징을 활용하지 않을 이유라도? –

답변

1

당신은 시도 할 수 있습니다 : 인덱스 일괄

  1. 찾기 사용자 따라서는 지연 시간을 계산하기 위해 인덱스를 사용할 수 있습니다.
  2. wait 옵션을 사용하면 제한 시간 대신 작업을 지연시킬 수 있습니다.

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