2016-04-11 6 views
9

Sto utilizzando le code di servizio Azure tramite l'SDK .net. C'è un flag su OnMessageHandler/OnMessageOptions chiamato "AutoRenewTimeout", ma sembra che ci sia confusione su cosa significhi realmente questo valore.Azure ServiceBus AutoRenewTimeout

Sulla documentazione ufficiale qui https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.onmessageoptions.aspx suggerisce che AutoRenewTimeout dovrebbe essere maggiore della coda lockduration.

Ottiene o imposta la durata massima entro cui il blocco verrà automaticamente rinnovato. Questo valore deve essere maggiore della durata massima del blocco dei messaggi; ad esempio, la proprietà LockDuration.

Questo sembra suggerire che AutoRenewTimeout è più o meno il tempo massimo che è necessario per elaborare un messaggio. per esempio. Se hai una durata di blocco di 1 minuto e un tempo di rinnovo automatico di 5 minuti, il messaggio verrà rinnovato per un totale di 5 volte prima di arrendersi e renderlo nuovamente visibile in coda. Vi sono anche altre risposte StackOverflow che confermano che questo è il caso, ad es. https://stackoverflow.com/a/36051408

Per gestire l'elaborazione di messaggi lunghi è necessario impostare AutoRenewTimeout == 10 min (nel tuo caso). Ciò significa che il blocco verrà rinnovato durante questi 10 minuti ogni volta che LockDuration è scaduto.

Quindi, se ad esempio il LockDuration è 3 minuti e AutoRenewTimeout è 10 minuti, ogni blocco di 3 minuti verrà automaticamente rinnovato (dopo 3 minuti, 6 minuti e 9 minuti) e il blocco verrà rilasciato automaticamente dopo 12 minuti dal momento consumato.

Tuttavia il più ricerca, mi sono imbattuto in un vecchio Tweet (https://twitter.com/clemensv/status/649940087267041284) da quello che sembra essere il Lead Architect per la messaggistica di Microsoft. In questo tweet sembra suggerire che AutoRenewTimeout è invece l'intervallo in cui chiamerà il metodo "RenewLock".

E 'l'intervallo in cui https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.renewlock.aspx viene chiamato su un messaggio mentre la richiamata è attiva

Così, per esempio se il vostro LockDuration consente è di 1 minuto, l'AutoRenewTimeout dovrebbe essere qualcosa come 30 secondi per garantire che la il blocco dei messaggi viene rinnovato prima che venga rilasciato.

Nelle mie prove, mi sto appoggiato verso il primo è corretto, ma il tweet mi sta facendo sospetti sul fatto forse non so il pieno utilizzo di AutoRenewTimeout

+0

Sulla base dei test che il cenario sembra rispondere alla tua domanda? – Thomas

+0

Il primo sembra essere corretto. Ma sono preoccupato che mi manchi qualcosa di importante/ovvio quando l'architetto capo per la messaggistica di Microsoft sembra contraddirlo. – MindingData

risposta

4

Il test è corretta.

AutoRenewTimeout consentirà di estendere il tempo di elaborazione oltre LockDuration senza aumentare DeliveryCount. Dovrebbe essere impostato sul tempo massimo di richiamata del tempo di elaborazione. Leggilo come un intervallo di tempo per attendere l'elaborazione della callback da completare. Dopo tale orario, l'API OnMessage non emetterà un rinnovo.

Problemi correlati