2015-05-06 9 views
7

Ho inviato con successo il lavoro a un pool di attori per svolgere il mio lavoro, ma ora voglio fare un po 'di aggregazione sui risultati restituiti da tutti i lavoratori. Come faccio a sapere che tutti hanno finito?Come posso attendere il completamento di tutti i lavori in Akka.Net?

Il meglio che mi è venuto in mente è di mantenere un insieme di id di richieste e attendere che il set si azzeri, ma questo sembra inelegante.

risposta

8

In genere, si desidera utilizzare quello che chiamiamo il modello "Commander" per questo. In sostanza, si dispone di un attore con stato (lo Commander) responsabile dell'avvio e del monitoraggio dell'attività. Quindi procedi con il lavoro effettivo attraverso il pool di attori e chiedi loro di riportare allo Commander mentre finiscono. Il comandante può quindi tracciare l'avanzamento del lavoro calcolando # completions/size of worker pool.

In questo modo, i lavoratori possono essere monitorati e riavviato in modo indipendente come fanno il lavoro, ma tutti la preziosa stato e le informazioni a livello di attività vive nel Commander (questo è chiamato il "Error Kernel pattern")

Potete vedere un esempio di questo nel Akka.NET scalable webcrawler demo.

+1

Grazie. Questo suona essenzialmente come ho finito. Ho avuto un attore di stato che sta coordinando tutto e tira fuori il lavoro e tiene traccia delle risposte. I documenti che voi ragazzi avete prodotto non sono secondi a nessuno. Grazie! – Damian

+0

nel caso, "comandante" dovrebbe ** attendere ** completamento su tutto il bambino? in caso contrario, il "comandante" ** non può essere eseguito due volte ** contemporaneamente? – constructor

+0

@constructor È possibile superare questa limitazione creando un pool di comandanti. Quindi invii il lavoro alla tua piscina e questo bilancia il lavoro tra gli attori del comandante. (Gli attori comandanti possono anche essere stateful, ovvero 'Diventa (Occupato)' o 'Diventa (Pronto)', e decidere di 'Stash' nuove richieste di lavoro fino a quando non sono' Pronti' per elaborarli, ecc. – BrainSlugs83

Problemi correlati