Abbiamo queste cose chiamate "esecuzioni" che vengono eseguite in determinati momenti. Hanno una proprietà delay
che in pratica dice "eseguimi dopo delay
microsecondi". Attualmente stiamo usando Cassandra come coda, ma sicuramente non è scalabile e il database non è lo strumento migliore per una coda.
Potrei implementarlo come una coda di priorità, ma dal momento che prevediamo di ricevere un numero elevato di messaggi, non posso mantenerlo in memoria. Stavo pensando di usare l'ActiveMQ di Apache che supporta la priorità, ma mi chiedo se valga la pena di inserire un intero framework. La mia altra opzione è quella di implementare una coda di priorità scritta sul disco (usando MappedByteBuffer
). La seconda opzione è più lavoro, ma più direttamente riguarda il nostro caso d'uso. Non mi dispiace usare ActiveMQ e sarebbe sicuramente più facile, ma mi chiedo solo se valga la pena di inserire un intero framework quando userò solo una piccola parte di esso.
Un altro contesto:
Abbiamo questi script che estraggono dati da diverse fonti. Lo script restituisce i dati, insieme a un oggetto di "esecuzione" che dice "eseguimi di nuovo dopo delay
microsecondi" (in pratica il polling dei nuovi dati). Attualmente questa esecuzione è scritta su Cassandra, e un thread periodicamente esegue il polling e preleva questi e poi chiama lo script appropriato.
Mentre leggo di più nelle code dei messaggi, mi rendo conto che potrebbe anche non funzionare. ActiveMQ ha una lista fissa di priorità, mentre io voglio una coda di priorità che supporti valori di priorità arbitrari.
Suppongo che sia più o meno un programmatore. Ogni esecuzione è "pianificata" per essere eseguita dopo delay
microsecondi. Sarebbe più appropriato usare qui una struttura di programmazione? Ce n'è uno che supporta le priorità?