2013-03-08 20 views
9

Mam problemy z kolejkami magistrali komunikatów Azure.Windows Azure MessageLockLostException

Mam MessageLockLostException odrzucone i Operacja żądania nie zakończyła się w ramach przydzielonego limitu czasu 00:01:10. Czas przydzielony na tę operację mógł być częścią dłuższego limitu czasu wynoszącego.

Ustawiłem kolejkę na ReceiveMode.PeekLock.

ja również sprawdzić

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

Dlaczego tak się stało, co powoduje blokadę rozdawać? Czytałem gdzieś od miejsca, w którym otrzymujesz domyślnie 5 minut. Zwykle proces ten trwa nieco dłużej. Chciałem odnowić zamek, ale to nie działa zbyt dobrze.

+0

Czy to ja, czy twoja wiadomość nie mówi ci, że twój limit czasu blokady wynosi 1:10 (70 sekund)? Ta konfiguracja jest ustawiana podczas tworzenia kolejki. –

Odpowiedz

16

Numer LockDuration jest własnością kolejki. Zazwyczaj ustawia się to podczas tworzenia kolejki. Jest to właściwość poziomu Queue i nie można jej zmienić w bazie wiadomości. To, co przeczytałeś, najprawdopodobniej mówi, że ten czas trwania nie może być dłuższy niż 5 minut. Wartością domyślną jest 1 minuta, dlatego napotykasz problemy. I dlaczego stajesz w obliczu tego 70 sekund później - zakładam, że logika sprawdzania tych warunków jest wykonywana co 10 sekund.

Proponuję więc utworzyć lub zmodyfikować kolejkę, aby ustawić właściwość LockDuration na 5 minut. Następnie, podczas pracy RenewLock Twojej wiadomości, gdy jest to odpowiednie.

+1

Ah, dziękuję! To ma więcej sensu! Aby uzyskać dodatkowe informacje: QueueDescription jest miejscem, w którym istnieje LockDuration. – Styles

+2

Uwaga: wartością domyślną podczas tworzenia kolejki z portalu zarządzania jest 30 sekund. – ken2k