Страница 1 из 1

Моментальный ответ от Beanstalkd

Добавлено: 2018.04.16, 16:17
Nex-Otaku
Настроил очереди заданий через Beanstalkd, всё работает прекрасно, но вот появилась проблема.

Захотелось поставить ожидание завершения задания (с таймаутом).
Отправляю задачу, жду выполнения, иду дальше.
Но чтобы "лишней" задержки при этом не было.

То есть, если я, например, буду опрашивать в цикле статус задачи, и поставлю задержку в секунду между итерациями, это уже неприемлемо снизит скорость обработки. Потому что на одну задачу "потеряется" секунда, а задач может быть сотни тысяч. Мне нужно, чтобы реакция происходила моментально.

Какие есть варианты это сделать?

Я искал в протоколе beanstalkd и ничего подходящего не нашёл. Это вообще реализуемо?

Re: Моментальный ответ от Beanstalkd

Добавлено: 2018.04.16, 20:37
zelenin
хочешь моментально - делай синхронно в рамках выполнения задачи. не хочешь в рамках задачи - значит допускаешь задержки.

Re: Моментальный ответ от Beanstalkd

Добавлено: 2018.05.02, 13:37
Nex-Otaku
Я видимо непонятно объяснил.

Есть два процесса, которые синхронизируются между собой через Beanstalk.
У самого бинстока есть только методы "поглядеть чего уже есть в очереди" и "дождаться новой задачи". То есть мы "моментально" можем поймать только начало - поступление задачи в очередь, но не её завершение - удаление из очереди.

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

Впрочем, кажется, я эту проблему решил - придумал, как настроить "обратные" tubes, чтобы в них прилетали уведомления через тот же бинсток. Пока ещё не тестировал, но по идее должно сработать.