Простая масштабируемая очередь работы/сообщений с задержкой

StackOverflow https://stackoverflow.com/questions/2364080

Вопрос

Мне нужно настроить очередь заданий/сообщений с возможностью установить задержку для задачи, чтобы свободный работник не подбирал ее сразу, а через определенное время (может варьироваться от задачи к задаче).Я рассмотрел несколько решений для работы с очередями в Linux (rabbitmq, gearman, memcacheq), но ни одно из них, похоже, не предлагает эту функцию «из коробки».

Есть идеи, как я могу этого добиться?

Спасибо!

Это было полезно?

Решение

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

Если вы выполняете долгосрочные задержки (более, скажем, 30 секунд) или задания несколько важны для выполнения (хотя и позже), тогда у него также есть система двоичного журнала, так что при любом сбое демона все равно будет сохраняться запись о задании. .Тем не менее, я пропустил сотни тысяч живых заданий через экземпляры Beanstalkd, и воркеры, которые я написал, всегда были более проблематичными, чем сервер.

Другие советы

Вы можете использовать брокера AMQP (например, RabbitMQ), и у меня есть «агент» (например,процесс Python, созданный с использованием pyton-amqplib), который находится на бирже и перехватывает определенные сообщения (конкретные routing_key);по истечении таймера отправьте сообщение обратно на обмен с другим routing_key.

Я понимаю, что это означает «перевод/сопоставление» routing keys но это работает.Работать с RabbitMQ и python-amqplib очень просто.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top