2015-02-02 13 views
5

Come funziona la gestione dei messaggi veleno per gli SDK di Azure WebJobs ServiceBusTrigger? Sto cercando di spingere i messaggi della coda del bus di servizio che sono state rimosse dalla coda più di volte 'X' per un ServiceBus diverso (o) coda di bagagliAzure WebJobs e ServiceBusTrigger

La documentazione in linea here e here e SDK I campioni di here non ha esempi su come la gestione dei messaggi veleno funziona per ServiceBusTrigger. Questo lavoro è in corso?

ho provato l'attuazione di una gestione utilizzando dequeueCount parametro messaggi non elaborabili personalizzato, ma non sembra che sia supportato per ServiceBusTriggers come mi è stato sempre un'eccezione di runtime {"Cannot bind parameter 'dequeueCount' when using this trigger."}

public static void ProcessMessage([ServiceBusTrigger(topicName: "abc", subscriptionName: "abc.gdp")] NotificationMessage message, 
      [Blob("rox/{PayloadId}", FileAccess.Read)] Stream blobInput, Int32 dequeueCount) 
     { 
      throw new ArgumentNullException(); 
     } 

risposta

6

Anche se non è possibile ottenere la proprietà dequeueCount per i messaggi ServiceBus, si può sempre legarsi a BrokeredMessage invece di NotificationMessage e ottenere la proprietà da esso.

6

Sembra WebJobs gestisce questo internamente il momento.

Riferimento: How to use Azure Service Bus with the WebJobs SDK

sezione specifico:

Come ServicebusTrigger funziona

L'SDK riceve un messaggio in modalità PeekLock e invita completa sul messaggio se la funzione termina con successo, o chiama Abandon se la funzione non riesce. Se la funzione è più lunga del timeout PeekLock, il blocco viene automaticamente rinnovato.

Serice Bus gestisce la coda della coda velenosa, quindi non è né controllato da né SDK di WebJobs.

+0

trovo il ServiceBusTrigger per essere ... intrigante. Se controllo lo stato per l'invocazione Function nel dashboard di WebJobs, lo stato "Success" con tempo di esecuzione in millisecondi per un richiamo che non è ancora terminato. È un processo di lunga durata (> 10 minuti), tuttavia lo stato è "Successo" immediatamente. ServiceBusTrigger restituisce immediatamente il successo e quindi gestisce il messaggio? – Anton

0

Per aggiungere alla risposta di Brendan Green, l'SDK di WebJob chiama Abandon sui messaggi che non sono riusciti a elaborare e, dopo il numero massimo di tentativi, questi messaggi vengono spostati nella coda di messaggi non recapitati dal bus di servizio. Le proprietà che definiscono quando un messaggio verrà spostato nella coda di messaggi non recapitabili, come il conteggio delle consegne massimo, il tempo di vita e la durata di PeekLock possono essere modificate in Bus di servizio -> Coda -> Proprietà.

È possibile trovare maggiori informazioni su SB coda di Dead Letter qui: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues