2016-08-22 3 views
0

У меня есть Sidekiq и работает в приложении RoR. Все работает отлично, а рабочие места стоят в очереди.Sidekiq Worker Pattern

Я видел много узоров, которые находятся в очереди на работу, но я интересуюсь этим рисунком, который я вижу в производстве и хорошо работает. Это идемпотент, может работать с несколькими работниками Sidekiq, а метод generate делает магию ....

Любые мнения о том, хороший ли образец использовать ...?

класс MailerDeamon включают Sidekiq :: Работник

def perform(id) 
    # idempotent 
    email = Email::Message.find_by(id: id) 
    return unless email 
    return unless email.sent? # or something that marks it has been sent 

    email.begin_transmission! 
    end 

    def self.generate 
    Email::Message.triggered(60).ids.each do |id| 
     perform_async(id) 
    end 
    end 
end 

Спасибо

ответ

0

Это хороший шаблон для использования. Что-то вроде этого:

email.begin_transmission! 
email.mark_as_sent! 

Единственная проблема, которая может возникнуть, если ваша база данных умирает после отправки сообщения, но прежде чем он может быть помечен как послал. В этом случае вы можете получить двойную доставку, но это должно быть чрезвычайно редко.