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

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

Какие-либо идеи о том, как я мог достигнуть этого?

Спасибо!

6
задан idevelop 2 March 2010 в 16:17
поделиться

2 ответа

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

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

11
ответ дан 9 December 2019 в 20:42
поделиться

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

Я понимаю, что это означает «перевод / отображение» ключей маршрутизации , но это работает. Работать с RabbitMQ и python-amqplib очень просто.

1
ответ дан 9 December 2019 в 20:42
поделиться