2013-03-01 11 views
6

Występuje dziwny problem. Mam usługę w chmurze A, która umieszcza komunikaty w kolejce magistrali usług dla innej usługi w chmurze B, aby ją odczytać. Usługa w chmurze B może zająć około sekundy, aby przetworzyć to, co musi zrobić, a następnie umieszcza komunikat z powrotem w kolejce dla usługi w chmurze A. Gdy usługa B w chmurze to robi, używa parametru ScheduledEnqueueTimeUtc, aby opóźnić około 1 - 10 sekund w wiadomości.Azure Service Bus Queue ScheduledEnqueueTimeUtc Delayed

W zeszły piątek lazurowe wyłączenie spowodowało całkowite wyłączenie tej aplikacji. Po ponownym uruchomieniu w trybie online funkcja ScheduledEnqueueTimeUtc powoduje opóźnienie o co najmniej 10 sekund. Na przykład generuję datetime, która ma od 1 do 10 sekund w przyszłości. Ustawiłem to jako ScheduledEnqueueTimeUtc i również dodałem ten czas jako właściwość komunikatu, który wysyłam, porównuję tę właściwość datetime z właściwością EnqueuedTimeUtc wiadomości, gdy otrzymam ją z powrotem w usłudze chmurowej A. Te 2 razy powinny być ładne blisko siebie, i to jest sposób, w jaki działa od miesięcy do ostatniego piątku.

Teraz usługa w chmurze B mówi, że wysłała tę wiadomość do kolejki w ciągu 1 sekundy. Cloud Service A twierdzi, że nie dostał się do kolejki przez 12-14 sekund. Korzystam z metod asynchronicznych podczas umieszczania wiadomości w kolejkach. Nie ma opóźnienia, jeśli nie korzystam z ScheduledEnqueueTimeUtc, czasy dostatecznie bliskie, gdy patrzę na nie z powrotem w usłudze chmurowej A. Ale jeśli ustawię ScheduledEnqueueTimeUtc na 1 sekundę w przyszłości, wydaje się, że nie pojawia się w kolejce po 12 -14 sekundy.

Pracuję nad tym teraz, używając kwarcu.net do planowania wiadomości zamiast ustawiania właściwości ScheduledEnqueueTimeUtc. Wydaje się jednak dziwne, że to się zaczęło.

Odpowiedz

6

Od ScheduledEnqueueTimeUtc Property's documentation:

. „Wiadomość czas nie oznacza, że ​​wiadomość zostanie wysłana jednocześnie enquing będzie się skolejkowany, ale rzeczywisty czas wysyłania zależy od obciążenia kolejce i jego stanu”

Ta właściwość powoduje, że wiadomość nie zostanie natychmiast dostarczona. Nie zostanie dostarczony przed ustawionego czasu, ale nie ma pewności, że zostanie on dostarczony w tym czasie w postaci dokładnie.

Jeśli potrzebujesz harmonogramowania o wysokiej rozdzielczości, opcja Kwarc może być opcjonalna. Możesz także ocenić nowy job scheduler, który jest częścią podglądu usług mobilnych.

+1

Dzięki, przeczytałem to w dokumentacji. Ale myślę, że to nie było tak jasne, jak to, co mówisz, i fakt, że to się właśnie zaczęło dziać, mnie wyrzuciło. Sądzę, że prędzej czy później wpadłbym na to. Potrzebuję wyczucia czasu, aby być jak najbardziej dokładnym w tej aplikacji, więc wygląda na to, że ScheduledEnqueueTimeUtc się skończył. Dzięki! –

+0

'Ta właściwość powoduje, że wiadomość nie zostanie dostarczona natychmiast. Co to oznacza? Czy wiadomość zostanie wysłana na platformę Azure, ale nie zostanie dodana do kolejki, dopóki nie zostanie osiągnięty ten czas, czy też będzie czekać w aplikacji klienckiej, która wyśle ​​ją w tym czasie? –

3

Wystąpiła ostatnia regresja w funkcji ShcheduledEnqueueTimeUtc, która w niektórych przypadkach spowodowałaby zachowanie opisane powyżej. Zostanie to naprawione w ciągu najbliższych kilku dni i powinieneś zobaczyć oczekiwane/oryginalne zachowanie.

Zaplanowane wiadomości mogą mieć pewne opóźnienie w zależności od tego, jak zajęta jest kolejka, ale można z niej korzystać w scenariuszu, o którym wspomniano powyżej. Każda regresja w funkcjonalności wpływająca na aplikację może zostać podniesiona jako bilet pomocy technicznej do platformy Azure: http://www.windowsazure.com/en-us/support/contact/

Powiązane problemy