Pergunta

Preciso configurar uma fila de emprego/mensagem com a opção de definir um atraso para a tarefa, para que ela não seja retirada imediatamente por um trabalhador gratuito, mas depois de um certo tempo (pode variar de tarefa para tarefa). Eu olhei para algumas soluções de fila Linux (RabbitMQ, Gearman, Memcacheq), mas nenhuma delas parece oferecer esse recurso fora da caixa.

Alguma idéia de como eu poderia conseguir isso?

Obrigado!

Foi útil?

Solução

Eu usei o BeansTalkd com grande efeito, usando a opção de atraso na inserção de um novo trabalho para esperar vários segundos até que o item fique disponível para ser reservado.

Se você estiver fazendo atrasos de longo prazo (mais do que 30 segundos), ou os empregos são um pouco importantes para executar (ABEIT mais tarde), ele também possui um sistema de madeira binário para que qualquer acidente de daemon ainda tenha um registro do trabalho . Dito isto, coloquei centenas de milhares de empregos ao vivo através de instâncias de Beanstalkd e os trabalhadores que escrevi foram sempre mais problemáticos que o servidor.

Outras dicas

Você pode usar um corretor AMQP (como o RabbitMQ) e eu tenho um "agente" (por exemplo, um processo Python construído usando Pyton-amqplib) que fica em uma troca e intercepta mensagens específicas (específicas routing_key); Depois que um temporizador tiver decorrido, envie de volta a mensagem na troca com um diferente routing_key.

Eu percebo que isso significa "tradução/mapeamento" routing keys Mas funciona. Trabalhar com RabbitMQ e Python-Amqplib é muito direto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top