2015-07-06 10 views
6

Sto usando i Webjobs di Azure per elaborare i messaggi da una coda.Imposta nextVisibleTime nell'SDK Webjobs di Azure

Ho visto che l'SDK di Webjobs elabora nuovamente un messaggio non riuscito dopo 10 minuti e, se fallisce 5 volte, lo sposta nella coda velenosa (1).

Inoltre, è possibile vedere il prossimo Tempo disponibile del messaggio nella coda, ovvero 10 minuti dopo l'intervallo di inserimento (2).

Desidero utilizzare la gestione degli errori dei messaggi di AzureSDK ma non riesco ad attendere 10 minuti affinché il messaggio venga elaborato nuovamente.

C'è un modo per impostare questo prossimo Tempo Visibile su alcuni secondi?

Create a .NET WebJob in Azure App Service

Se il metodo non riesce prima di completare, il messaggio della coda non viene eliminato; dopo un lease di 10 minuti scade, il messaggio viene rilasciato per essere raccolto nuovamente ed elaborato.

How to use Azure queue storage with the WebJobs SDK

public static void WriteLog([QueueTrigger("logqueue")] string logMessage, 
    DateTimeOffset expirationTime, 
    DateTimeOffset insertionTime, 
    DateTimeOffset nextVisibleTime, 

Nota: Non ci sono domande simili qui in StackOverflow ma senza risposta:

risposta

0

Se c'è un'eccezione durante l'elaborazione della tua funzione, l'SDK riporterà immediatamente il messaggio in coda e il messaggio verrà rielaborato. Non vedi questo comportamento?

+0

Ciao! Sì, sto vedendo questo comportamento, ma questo messaggio verrà rielaborato solo dopo 10 minuti, come ho menzionato nella mia domanda. Voglio cambiare questa volta a 10 secondi. – Anuar

+0

È possibile eseguire il binding a CloudQueueMessage e impostare il timeout di visibilità come segue public static void Hi ([QueueTrigger ("invisible")] Messaggio CloudQueueMessage) { throw new Exception ("Hi"); } –

5

In ultima release v1.1.0, è ora possibile controllare il timeout visibilità registrando le tue QueueProcessor casi tramite JobHostConfiguration.Queues.QueueProcessorFactory. Ciò consente di controllare il comportamento avanzato di elaborazione dei messaggi a livello globale o per coda/funzione.

Ad esempio, per impostare la visibilità per i messaggi non riusciti, è possibile ignorare ReleaseMessageAsync come segue:

protected override async Task ReleaseMessageAsync(CloudQueueMessage message, FunctionResult result, TimeSpan visibilityTimeout, CancellationToken cancellationToken) 
{ 
    // demonstrates how visibility timeout for failed messages can be customized 
    // the logic here could implement exponential backoff, etc. 
    visibilityTimeout = TimeSpan.FromSeconds(message.DequeueCount); 

    await base.ReleaseMessageAsync(message, result, visibilityTimeout, cancellationToken); 
} 

Maggiori dettagli possono essere trovati nel release notes here.

Problemi correlati