Domanda

Ho bisogno di impostare un lavoro/coda di messaggi con la possibilità di impostare un ritardo per l'attività in modo che non è preso subito da un lavoratore libero, ma dopo un certo tempo (che può variare da compito a compito).Ho guardato in un paio di linux coda di soluzioni (rabbitmq, gearman, memcacheq), ma nessuno di loro sembra offrire questa opzione out of the box.

Tutte le idee su come ho potuto realizzare questo?

Grazie!

È stato utile?

Soluzione

Ho usato BeanstalkD di grande effetto, utilizzando l'opzione di ritardo sull'inserimento di un nuovo lavoro di attendere alcuni secondi fino a che la voce diventa disponibile per essere riservati.

Se si stanno facendo più lungo periodo di ritardo (più di, diciamo 30 secondi), o i posti di lavoro sono un po ' importante eseguire (abeit dopo), poi ha anche un binario sistema di registrazione, in modo che qualsiasi demone incidente avrebbe ancora un record per il lavoro.Detto questo, ho messo centinaia di migliaia di live di posti di lavoro attraverso Beanstalkd istanze e i lavoratori che ho scritto erano sempre più problematico rispetto al server.

Altri suggerimenti

Si potrebbe usare un broker AMQP (come RabbitMQ) e ho un "agente" (ad esempio, un processo di pitone costruito utilizzando pyton-amqplib) che si trova su uno scambio un intercetta i messaggi specifici (specifici routing_key); una volta che un timer è trascorso, rispedire il messaggio sullo scambio con un routing_key diversa.

Mi rendo conto che significa "traduzione / mappatura" routing keys ma funziona. Lavorare con RabbitMQ e python-amqplib è molto semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top