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
Sulla base dei test che il cenario sembra rispondere alla tua domanda? – Thomas
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