Sto tentando di creare un lavoro di lunga durata da utilizzare in Azure. Mi piacerebbe essere in grado di eseguire più istanze di questo lavoro se ne avessi avuto bisogno.
Stavo pensando di separare la funzionalità principale in due diversi webjob. Con un lavoro chiamato "il cervello". mentre l'altro lavoro (s) sarebbe chiamato il lavoratore.
Brain dovrebbe essere in grado di sapere realmente quali lavori devono essere eseguiti e inserirli nei file di archiviazione di Azure che saranno ascoltati dai lavori dei lavoratori. Immagino alcune code diverse e pochi diversi operatori che gestiscono compiti diversi ascoltando le code.
La lista dei lavori è archiviata in un normale database con i valori relativi a quando deve essere eseguito successivamente e al tipo di lavoro. Brain controllerà periodicamente il database e otterrà il prossimo lavoro che deve essere eseguito. Trasferiscilo a una coda affinché un webjob di un operatore possa gestirlo e riscriverlo nel database se il lavoro viene eseguito regolarmente o semplicemente aggiornare lo stato nel database.
Domanda: Data questa configurazione, come gestiresti effettivamente il prossimo lavoro da eseguire (ciò che è successivo è basato su una data e un'ora) e impostando lo stato su "elaborazione" (quindi non viene selezionato due volte) in tale un modo in cui non ci sono possibilità che venga raccolto due volte (due istanze di Brain in esecuzione)? Sto usando EF6 in questo caso. C'è un modo per ottenere il record e aggiornarlo prima che chiunque altro possa farlo sul database?
Una versione più breve della domanda è Come posso tirare e aggiornare un record ed essere sicuro che non venga modificato mentre il processo sta accadendo usando EF6?
Dovrei usare un diverso tipo di gestione del lavoro? C'è un buon tutorial disponibile su un modo migliore per farlo?