Очереди Resque создаются основным потоком или рабочими?

Я немного сбит с толку, потому что я не настроил никаких рабочих (на Heroku), и когда я сделал Resque.enqueue, задание было добавлено в очередь (но не завершено), поэтому я предполагаю, что основной поток создал очередь.

Поскольку я использую Redis To Go, не помешает ли это использованию фонового процесса, такого как Resque, поскольку Redis To Go сам по себе является внешней размещенной базой данных, поэтому начальный процесс записи основным потоком для добавления задания в очередь может быть непредсказуемым?


person vince    schedule 09.07.2011    source источник


Ответы (1)


Что происходит, когда вы вызываете Resque.enqueue, так это то, что Resque подключается к базе данных Redis и добавляет информацию, необходимую для последующего вызова задания. Затем рабочий подключается к Redis, извлекает первое добавленное задание, делает это и повторяет.

Так что да, «основной» поток подключается к Redis. Тот факт, что это внешняя база данных, не имеет большого значения. Я имею в виду, что для людей, использующих надстройки базы данных Mongo, база данных Mongo также размещается на внешнем хосте. Идея состоит в том, что задание, которое вы хотите выполнить, занимает больше времени, чем время, необходимое для его добавления в Redis.

person sarahhodne    schedule 09.07.2011
comment
Задание, которое мы добавляем в очередь, заключается в отправке уведомлений по электронной почте (используя аддон sendgrid на Heroku). Я не был уверен, имеет ли смысл использовать основной поток для вызова внешнего приложения (redis to go), чтобы избежать вызова другого внешнего приложения (sendgrid). - person vince; 10.07.2011
comment
Попробуйте вычислить время, необходимое для отправки почты через sendgrid, и время, необходимое для добавления задания в очередь. Если значительно быстрее добавить его в очередь, сделайте это. В противном случае это просто еще один шаг, и я бы удалил часть Resque. - person sarahhodne; 10.07.2011
comment
Что ж. это то, что вызывает внешние приложения, такие как sendgrid - это совершенно непредсказуемо. Большую часть времени вообще не требует времени но иногда глохнет на 1-2 секунды. я не знаю, как будет добавлять задание в очередь с помощью Redis для перехода — до сих пор это было быстро, но мы не использовали его достаточно долго, чтобы знать на самом деле. - person vince; 10.07.2011
comment
Вы всегда можете переключиться на delayed_job и добавить работника в свое приложение. Таким образом, задания будут выполняться локально. В противном случае я считаю, что единственной заметной задержкой при использовании Redis To Go будет задержка в сети. - person sarahhodne; 10.07.2011