Domanda

Voglio creare un'applicazione di Azure con due ruoli di lavoro e NESSUN ruolo Web. Quando i ruoli di lavoro vengono avviati per la prima volta, desidero SOLO UNO dei ruoli per eseguire una sola volta quanto segue:

  • Scarica e analizza un file master, quindi accoda più "quot" child " attività basate sul contenuto del file principale
  • Accodamento di un singolo file principale download " child " attività da eseguire il giorno successivo

Ciascuno dei "figli" i compiti sarebbero quindi svolti da entrambi i lavoratori fino all'esaurimento della coda dei compiti. Pensa a tutto come "adescare la pompa"

Questo genere di cose è davvero semplice se aggiungo il primo "master" attività manualmente in una coda chiamando un ruolo Web ma sembra essere davvero difficile da eseguire in una modalità di avvio automatico.

Qualsiasi aiuto in questo senso sarebbe molto apprezzato!

Grazie .....

È stato utile?

Soluzione

Una possibilità: invece di chiamare un ruolo Web, è sufficiente caricare direttamente la coda. (Sembra che questo sia il tipo di applicazione che vorresti girare automaticamente per fare un po 'di lavoro e poi spegnerlo di nuovo ... se lo stai automatizzando, dovrebbe essere banale anche automatizzare il caricamento della coda.)

Un'opzione (forse) migliore: utilizzare una sorta di meccanismo di blocco per assicurarsi che solo un'istanza di lavoro funzioni l'inizializzazione. Un modo per eseguire questa operazione è provare a creare la coda (o un BLOB o un'entità in una tabella). Se esiste già, l'altra istanza sta gestendo l'inizializzazione. Se la creazione ha esito positivo, allora è il lavoro di questa istanza.

Nota che è sempre meglio usare un lease che un lock, nel caso in cui l'istanza che sta eseguendo l'inizializzazione fallisca. Prendi in considerazione l'utilizzo di un timeout (ad es. Memorizzazione di un timestamp nell'archiviazione delle tabelle o nei metadati del BLOB o nel nome della coda ...).

Altri suggerimenti

Abbiamo riscontrato esattamente lo stesso tipo di problema, ecco perché abbiamo introdotto un Mappatore O / C (oggetto su cloud). Fondamentalmente, vuoi introdurre due tipi di servizi cloud:

  1. QueueService che consuma i messaggi ogni volta che è disponibile.
  2. Servizio pianificato che avvia le operazioni su base programmata.

Quindi, come altri hanno suggerito, nel cloud, preferisci davvero usare lease s anziché i blocchi, al fine di evitare che la tua app cloud finisca congelata per sempre a causa di un hardware temporaneo (o infrastruttura ).

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