2014-06-27 28 views
6

Mam następującą logikę w WebJob przy użyciu nowego pakietu SDK WebJobs 0.3.0 beta. Gdy mój kod nie powiedzie się przetworzeniu wiadomości, pulpit nawigacyjny Azure pokazuje wyjątek agregacji (co ma sens, ponieważ jest to asynchronizacja). JEDNAKŻE, nie próbuje ponownie przetwarzania wiadomości.WebJobs nie ponawia próby niepowodzenia Kolejka nieudana

Bardzo mały documentation udało mi się znaleźć wskazuje, że wiadomość powinna zostać ponowiona w ciągu 10 minut od awarii. Czy tak nie jest w przypadku nowego pakietu SDK?

public static Task ProcessMyMessageAsync(
    [QueueTrigger(Config.MY_QUEUE)] string msg, 
    int dequeueCount, 
    CancellationToken cancellationToken) 
{ 
    var processor = Config.Container.GetInstance<IMessageProcessor>(); 
    return processor.HandleJobAsync(msg, dequeueCount, cancellationToken); 
} 

Wyjątek otrzymuję wynika z wyjątkiem SQL Timeout (jego zapytań db przeciwko SQL Azure w moim kodu):

System.AggregateException: System.AggregateException: One or more errors occurred. 
    ---> System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. 
     ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 
     ---> System.ComponentModel.Win32Exception: The wait operation timed out 
+0

Czy awaria występuje podczas fazy wiążącej lub wewnątrz funkcji? Czy możesz podać więcej szczegółów na temat wyjątku? –

+0

@VictorHurdugaci Wyjątek nie wydaje się być związany z JobHost lub czymś podobnym. Jest to zdecydowanie w moim kodzie i ponieważ jest to limit czasu SQL, chcę, aby wiadomość została ponowiona. – ericb

Odpowiedz

0

Należy ustawić MaxDequeueCount.

JobHostConfiguration jobHostConf = new JobHostConfiguration(); 
jobHostConf.Queues.MaxDequeueCount = 10; 
var host = new JobHost(jobHostConf); 
host.RunAndBlock(); 

Która będzie ponawiać próbę 10 razy, zanim wiadomości zostaną umieszczone w kolejce martwych/złych liter.

Można również użyć niestandardowej zasady ponawiania w funkcji. Proponuję spojrzeć na „The Transient Fault Handling aplikacji Block” https://msdn.microsoft.com/en-us/library/hh680934(v=pandp.50).aspx

Albo można włączyć ponownie za EF z SqlAzureExecutionStrategy https://msdn.microsoft.com/en-us/data/dn456835.aspx

Powiązane problemy