2010-08-23 11 views
6

Da quello che posso vedere Gearman non supporta i lavori pianificati o i lavori in ritardo. Stavo pensando che forse il lavoro programmato potrebbe essere prima inserito in at e poi aggiunto alla coda di Gearman dopo che il periodo at è scaduto.Pianifica un lavoro in Gearman per una data e un'ora specifiche

at le attività sono persistenti poiché sono scritte come file in una directory nella directory di spool del server. Quindi l'unico collo di bottiglia potrebbe essere un semplice script per aggiungere l'attività alla coda di Gearman perché at non può essere distribuito tra i server. Passare a Gearman per elaborare il lavoro effettivo significa che posso ottenere la corretta registrazione dei lavori ecc.

È questo il modo migliore per avvicinarsi a questo e avete qualche idea alternativa?

Il motivo per cui ho optato per Gearman rispetto ad altre soluzioni di coda è che ha un'estensione PHP.

Il codice che sto scrivendo è utilizzato per mantenere una coda di e-mail che devono essere inviate. Quindi potrei specificare che voglio inviare una email a [email protected] alle 9.50 di venerdì per esempio.

+6

Questo perché noi tedeschi, noi facciamo il nostro lavoro * subito *. Non abbiamo bisogno di pianificazione. –

+1

Molto divertente! Sembra che tutte le domande di Gearman siano state analizzate in questo modo. – Treffynnon

+2

@Treffynnon si, lo invitano .... Sono troppo spesso messi nel modo giusto ("Come fermare un operaio di ingranaggi", "uccidere i lavoratori di ingranaggi con un solo comando" ....:) :) –

risposta

1

Una soluzione piuttosto hacky, che funzionerebbe bene solo con una risoluzione oraria o giornaliera, sarebbe quella di far sì che il nome del lavoro (funzione) contenga la data in cui si desidera inviarlo . Quindi fai in modo che i lavoratori inizino a cron ogni ora o giorno per registrarsi per tali lavori.

Ad esempio, se si desidera inviare un'e-mail alle 9:00 di lunedì 12 marzo 2012, aggiungere un lavoro alla coda con un nome come email_2012-03-12_09: 00. Quindi avere un cron job in esecuzione oraria, che esegue un lavoratore che si registra per qualsiasi lavoro corrispondente a email_ + data e ora correnti.

Come ho detto, probabilmente funzionante, ma piuttosto hacky!

UPDATE 1: ho visto di recente che la documentazione per gearmand database persistence ora citare un campo denominato when_to_run che è un INT, e potrebbe potenzialmente contenere un'epoca timestamp unix. Questo campo non sembra essere ancora referenziato nel codice.

0

Se si sta utilizzando Zend ...

SlmQueue è un livello di lavoro coda di astrazione. Ti consente di utilizzare facilmente i sistemi di code di lavoro in un'applicazione Zend Framework 2. In tal modo non impone all'utente di utilizzare in modo specifico un tipo di coda di lavoro. Puoi scrivere il tuo codice e i tuoi lavori indipendentemente dal sistema sottostante. Ciò consente una grande flessibilità e disaccoppiamento dei sistemi.

https://github.com/juriansluiman/SlmQueue

Problemi correlati