Azure ServiceBus AutoRenewTimeout

9

Ich verwende Azure ServiceBus Queues über das .net SDK. Es gibt ein Flag für die OnMessageHandler / OnMessageOptions namens "AutoRenewTimeout", aber es scheint Verwirrung darüber zu geben, was dieser Wert eigentlich bedeutet.

In der offiziellen Dokumentation hier Ссылка schlägt es das AutoRenewTimeout vor sollte größer als die Warteschlangensperre sein.

  

Ruft die maximale Dauer ab, in der die Sperre automatisch erneuert wird, oder legt diese fest. Dieser Wert sollte größer als die längste Dauer der Nachrichtensperre sein. zum Beispiel die LockDuration-Eigenschaft.

Dies deutet darauf hin, dass das AutoRenewTimeout mehr oder weniger die maximale Zeit ist, die es dauern sollte, eine Nachricht zu verarbeiten. z.B. Wenn Sie eine Sperrdauer von 1 Minute und ein automatisches Wiedereinschalten von 5 Minuten haben, wird die Nachricht insgesamt 5 Mal erneuert, bevor Sie aufgibt und sie wieder in der Warteschlange sichtbar macht. Es gibt auch andere StackOverflow-Antworten, die dies bestätigen, z. Ссылка

  

Um lange Nachrichten verarbeiten zu können, sollten Sie AutoRenewTimeout == 10 min (in Ihrem Fall) einstellen. Das bedeutet, dass die Sperre während dieser 10 Minuten jedes Mal erneuert wird, wenn LockDuration abgelaufen ist.

     

Wenn Ihre LockDuration beispielsweise 3 Minuten und AutoRenewTimeout 10 Minuten beträgt, wird jede 3-minütige Sperre automatisch erneuert (nach 3 Minuten, 6 Minuten und 9 Minuten) und die Sperre wird automatisch nach 12 Minuten aufgehoben, seit die Nachricht verbraucht wurde .

Aber bei mehr Forschung stolperte ich über einen alten Tweet ( Ссылка ) von dem, der aussieht, der Hauptarchitekt zu sein Nachrichten bei Microsoft. In diesem Tweet scheint es, dass AutoRenewTimeout stattdessen das Intervall ist, in dem es die "RenewLock" -Methode aufrufen wird.

  

Es ist das Intervall, in dem Ссылка aufgerufen wird eine Nachricht, während der Rückruf aktiv ist

Wenn Ihre Sperrdauer beispielsweise 1 Minute beträgt, sollte der AutoRenewTimeout-Wert etwa 30 Sekunden betragen, um sicherzustellen, dass die Nachrichtensperre erneuert wird, bevor sie freigegeben wird.

Bei meinen eigenen Tests bin ich darauf bedacht, dass die erste korrekt ist, aber der Tweet macht mich verdächtig auf die Tatsache, dass ich vielleicht nicht die volle Nutzung von AutoRenewTimeout weiß

    
MindingData 11.04.2016, 23:47
quelle

1 Antwort

4

Ihr Test ist korrekt.

AutoRenewTimeout ermöglicht es, die Verarbeitungszeit über LockDuration hinaus zu erweitern, ohne die DeliveryCount zu erhöhen. Es sollte auf den maximalen Verarbeitungszeit-Callback eingestellt werden. Lesen Sie es als Zeitbereich, um auf die Verarbeitung des Callbacks zu warten. Nach dieser Zeit gibt OnMessage API keine Verlängerung aus.

    
Sean Feldman 13.04.2016, 05:28
quelle

Tags und Links