2015-09-09 1 views
8

Глядя на работу ниже, я предполагаю, что задание выполняется на очереди low_priority.Есть ли в ActiveJob очереди с определенным приоритетом?

class GuestsCleanupJob < ActiveJob::Base 
    queue_as :low_priority 
    #.... 
end 

Я согласен с этим, но это только имя очереди правильное? На самом деле это не имеет ничего общего с приоритетом. Например, если я создал задание с очередью с именем :my_queue, он будет рассматриваться как имеющий тот же приоритет, что и очередь :low_priority.

Из документации я не смог найти ничего, что указывало бы на то, что я могу назначать приоритеты для заданий, стоящих в очереди. Я знаю, что delayed_jobs имеет эту функцию, но я не нашел ее в active_job.

ответ

4

Приоритет зависит от фактического QueueAdapter и того, как этот адаптер был настроен. Если ваш адаптер не поддерживает приоритеты или не настроен должным образом, то ActiveJob также не поможет.

Найти более подробную информацию о адаптерах здесь:

http://edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html

Основная идея состоит в следующем:

Главное, чтобы гарантировать, что все приложения Rails будет иметь инфраструктуру рабочих мест в место. Тогда у нас могут быть функциональные возможности фреймворка и другие драгоценные камни, не беспокоясь о различиях API между различными рабочими местами, такими как Delayed Job и Resque. Тогда выбор вашей очереди на обслуживание становится более оперативным. И вы сможете переключаться между ними, не переписывая свои задания.

Конфигурация очереди (включая приоритеты) становится ответственностью адаптера.

В качестве примера конфигурации очереди см Sidekiq вики:

https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

+1

Да, это имеет смысл, но delayed_job и sidekiq обе очереди поддержки и приоритет, и вы можете установить на уровне рабочих мест. Поддерживает ли активная работа это, если вы используете адаптер delayed_job или sidekiq? Похоже, вы говорите «да» ... но ни одна документация не помогает. Я уже посмотрел ссылки, которые вы добавили, прежде чем публиковать этот вопрос, но я ничего не мог найти ... возможно, я чего-то не хватает? –

+0

Для этого вам необходимо прочитать документацию по вашему адаптеру. ActiveJob - это абстракция. – dimakura

+1

Я понимаю это. Я прочитал документацию - я использую delayed_jobs, и вы можете установить приоритет задания на delayed_job, например 'handle_asynchronously: send_mailer,: priority => 20'. С sidekiq я вижу, что это возможно, поскольку вы устанавливаете очереди и приоритет в файл конфигурации. Записанная работа, похоже, не имеет этого. Мой вопрос заключается в том, как использовать абстракцию, которая является ActiveJob, чтобы установить приоритет ... возможно ли это через ActiveJob или мне нужно использовать delayed_job? Глядя на адаптер delayed_job в ActiveJob, это не кажется возможным. Я не уверен, что еще сказать, чтобы быть более четким. –