2011-05-26 18 views

Odpowiedz

8

Kolejki Azure nie zapewnia kolejności komunikatów i unikalności komunikatów. Wiadomości będą przetwarzane "co najmniej raz", ale nic nie zapewni, że nie będzie przetwarzane dwa razy, więc nie zapewnia "co najwyżej raz".

Powinieneś przygotować się do otrzymania tej samej wiadomości dwa razy. Możesz umieścić identyfikator w treści wiadomości jako część swoich danych.

11

vtortola prawie to zakryła, ale chciałem dodać trochę więcej szczegółów, dlaczego jest to co najmniej raz dostarczona.

Podczas czytania elementu kolejki nie jest on usuwany z kolejki; zamiast tego staje się niewidoczny, ale pozostaje w kolejce. Ten okres niewidzialności wynosi domyślnie 30 sekund (maksymalnie 2 godziny). W tym czasie kod, który usunął element z kolejki, ma tyle czasu, aby przetworzyć komendę znajdującą się w wiadomości kolejki i usunąć element kolejki.

Zakładając, że element kolejki został usunięty przed upływem limitu czasu, wszystko jest w porządku. Jednak: po osiągnięciu limitu czasu element kolejki staje się ponownie widoczny, a kod zawierający element kolejki nie może go już usunąć. W takim przypadku ktoś inny może odczytać ten sam komunikat kolejki i ponownie przetworzyć ten komunikat.

Ze względu na fakt komunikat kolejka może timeout i może ponownie pojawić:

  • Twój przetwarzanie kolejka musi być idempotent - operacje na kolejce komunikatów musi prowadzić w taki sam wynik (takich jak rendering miniaturka zdjęcia).
  • Musisz pomyśleć o korektach limitu czasu. Może się okazać, że polecenia są poprawne, ale przetwarzanie trwa zbyt długo (być może 45-sekundowy kod wyświetlający miniaturki działał bez zarzutu, dopóki ktoś nie załadował obrazu o rozmiarze 25 MP)
  • Musisz pomyśleć o wiadomościach zatrutych - tych, które nigdy nie będą przetwarzane poprawnie. Być może powodują one wyrzucenie wyjątku lub mają nieważny warunek, który powoduje, że procesor komunikatu przerwie przetwarzanie, co prowadzi do ponownego pojawienia się komunikatu w kolejce. Istnieje właściwość o nazwie DequeueCount - rozważ oglądanie tej właściwości po przeczytaniu elementu kolejki, a jeśli jest równa, powiedzmy, 3, wciśnij wiadomość do tabeli lub obiektu typu blob i wyślij sobie powiadomienie, aby poświęcić trochę czasu na debugowanie tej wiadomości w trybie offline.

Więcej szczegółów na temat interfejsu REST API niskiego poziomu dla pobierania jest here. Zapewni to lepszy wgląd w obsługę komunikatów kolejki systemu Windows Azure.

Powiązane problemy