2015-03-07 2 views
5

Ho due scenari diversi per elaborare 2 diversi tipi di code utilizzando l'archiviazione della coda di Azure.Configurare QueueTrigger per coda utilizzando la memoria della coda di Azure

Desidero impostare una coda per eseguirne una dopo l'altra e l'altra per eseguire contemporaneamente.

Ho esaminato la documentazione e posso applicare la configurazione all'host interessando l'intera gamma di code.

static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     config.Queues.BatchSize = 8; 
     config.Queues.MaxDequeueCount = 4; 
     config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

così posso configurare tali scenari utilizzando un singolo account di archiviazione azzurro?

risposta

1

Dalla tua domanda, ho capito che hai 2 code e ogni coda deve essere utilizzata per elaborare diversi compiti/lavori.

È possibile seguire questi approcci

1) inviare i 2 posti di lavoro sul web, ogni Attendere in diverse code e innescare corrispondente lavoro ogni volta che appare un messaggio sulla rispettiva lista d'attesa. Il codice di configurazione che hai citato sopra imposta la base per un lavoro. E AFAIK, un lavoro può aspettare su una coda. Si può avere un metodo come questo accanto al Main() metodo

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage) 
{ 
    //do something 
} 

2) se si desidera attivare più scenari basati su messaggi da una coda, si può avere un blocco if altro sul metodo ProcessQueueMessage o se si desidera renderlo più gestibile, utilizzare lo schema di strategia per eseguire il metodo corretto da ProcessQueueMessage

Se si segue il numero 1 sopra, verranno distribuiti diversi lavori Web per ogni attività/lavoro/scenario. Se segui il n. 2 sopra, distribuirai un lavoro web e ciò che ciascun messaggio fa verrà deciso durante l'elaborazione del messaggio.

Documentazione relativa alla coda di attesa here.

[Update]

Come sappiamo un lavoro web può aspettare su una sola coda, in attesa nella coda non è l'approccio giusto in questo caso. Meglio attivare il lavoro web periodicamente (diciamo una volta in 5 minuti). La logica per rimuovere i messaggi da più code e elaborarli fa parte di un unico lavoro Web. L'elaborazione di ogni coda può essere un metodo che viene chiamato dallo stesso lavoro Web (uno dopo l'altro o contemporaneamente utilizzando Task). È possibile passare il conteggio dei messaggi su CloudQueue.GetMessages per ogni coda. Sarà molto simile a quello che fa il servizio Windows. Solo che la parte di attivazione è curata dal lavoro Web e viene eseguita come un lavoro Web piuttosto che come un servizio Windows. Ecco un pseudocodice ruvida:

main() 
{ 
    // initialize webjob 
} 
public static MyWebJobMethod(...) 
{ 
    Task a =() => {//process queue 1}; 
    Task b =() => {//process queue 2} 
    Task.WaitAll(a,b); 
} 
+0

grazie per la risposta ho guardato che la documentazione prima di inviare la domanda, non ho te possibilità di distribuire più posti di lavoro web, in realtà sto facendo funzionare un servizio di Windows questo sta facendo perfettamente il ruolo del lavoro sul web, il problema è come posso impostare "Il numero massimo di messaggi in coda che vengono rilevati simultaneamente", per esempio diciamo che un trigger dovrebbe attivarne uno alla volta e altri potrebbero avere la configurazione predefinita. –

+0

http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config –

+0

aggiornato la mia risposta ... – Amit