2013-03-08 3 views
9

Ich habe Probleme mit Azure Message Bus Queues.Windows Azure MessageLockLostException

Ich bin MessageLockLostException geworfen und Die Anfrage Operation wurde nicht innerhalb der zugewiesenen Timeout von 00.01.10 abgeschlossen. Die Zeit, die diesem Vorgang zugewiesen wurde, war möglicherweise ein Teil eines längeren Zeitlimits.

Ich habe meine Warteschlange in ReceiveMode.PeekLock gesetzt.

Ich überprüfe auch

if(message.LockedUntilUtc.Minute <= 1) 
    message.RenewLock(); 

Warum dies geschehen würde, was die Sperre verursacht geben? Ich habe irgendwo von dem Punkt gelesen, an dem du empfangen hast, dass du standardmäßig 5 Minuten hast. Dieser Prozess dauert normalerweise etwas länger. Ich wollte das Schloss erneuern, aber das funktioniert nicht so gut.

+0

Ist es meine oder sagt Ihre Nachricht nicht, dass Ihr Sperr-Timeout 1:10 (70 Sekunden) ist? Diese Konfiguration wird beim Erstellen der Warteschlange festgelegt. –

Antwort

16

Die LockDuration ist Eigenschaft der Warteschlange. In der Regel legen Sie dies beim Erstellen der Warteschlange fest. Dies ist Queue Level-Eigenschaft und kann nicht auf einer Nachrichtenbasis geändert werden. Was Sie gelesen haben, ist wahrscheinlich, dass diese Dauer nicht länger als 5 Minuten sein darf. Der Standardwert ist 1 Minute. Daher treten Probleme auf. Und warum Sie 70 Sekunden später darauf reagieren - ich nehme an, dass die Logik zum Überprüfen dieser Bedingungen alle 10 Sekunden ausgeführt wird.

Also ich schlage vor, dass Sie Ihre Warteschlange erstellen oder ändern, um LockDuration Eigenschaft auf 5 Minuten festzulegen. Dann, während der Arbeit RenewLock Ihrer Nachricht, wenn es angebracht ist.

+1

Ah, danke! Das macht mehr Sinn! Weitere Informationen: WarteschlangeDescription ist, wo LockDuration vorhanden ist. – Styles

+2

Als Randnotiz ist der Standardwert beim Erstellen einer Warteschlange aus dem Verwaltungsportal 30 Sekunden. – ken2k