Простая масштабируемая работа / очередь сообщений с задержкой - PullRequest
6 голосов
/ 02 марта 2010

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

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

Спасибо!

Ответы [ 2 ]

11 голосов
/ 03 марта 2010

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

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

1 голос
/ 02 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...