Мое приложение создает задания resque, которые должны обрабатываться последовательно для каждого пользователя, и они должны обрабатываться как можно быстрее (максимальная задержка 1 секунда).
Пример: задание1 и задание2 создаются для пользователя1 и задание3 для пользователя2. Resque может обрабатывать job1 и job3 параллельно, но job1 и job2 должны обрабатываться последовательно.
У меня разные мысли о решении:
- Я мог бы использовать разные очереди (например, очередь_1... очередь_10) и запускать работника для каждой очереди (например,
rake resque:work QUEUE=queue_1
). Пользователи назначаются очереди/работнику во время выполнения (например, при входе в систему, каждый день и т. д.) - Я мог бы использовать динамические «пользовательские очереди» (например, queue_#{user.id}) и попытаться расширить resque, чтобы только 1 рабочий мог обрабатывать очередь за раз (как указано в Resque: один рабочий процесс на очередь)
- Я мог бы поместить задания в очередь без восстановления и использовать «метазадание для каждого пользователя» с resque-lock (https://github.com/defunkt/resque-lock), который обрабатывает эти задания.
Есть ли у вас опыт реализации одного из этих сценариев на практике? Или есть другие идеи, над которыми стоит подумать? Буду признателен за любой вклад, спасибо!