Udostępnij za pośrednictwem


Wstępne pobieranie komunikatów usługi Azure Service Bus

Funkcja prefetch pobiera komunikaty w tle do lokalnego buforu pobierania wstępnego do liczby pobierania wstępnego. Komunikaty są obsługiwane z buforu. W takim przypadku miejsce jest zwalniane w buforze, a odbiornik pobierze więcej w tle.

Aby włączyć funkcję przed pobraniem, ustaw wstępnie pobraną liczbę klienta kolejki lub subskrypcji na liczbę większą niż zero. Ustawienie wartości na zero powoduje wyłączenie pobierania wstępnego. Jeśli po wyłączeniu funkcji w buforze pobierania wstępnego występują komunikaty, aplikacja najpierw odbiera te komunikaty z buforu, a następnie przechodzi do usługi.

Ustaw właściwość count prefetch dla obiektów ServiceBusReceiverOptions i ServiceBusProcessorOptions .

Uwaga

Zestaw JAVA Script SDK nie obsługuje funkcji pobierania wstępnego .

Gdy komunikaty są dostępne w buforze pobierania wstępnego, wszystkie kolejne wywołania odbierania są natychmiast realizowane z buforu. Bufor jest uzupełniany w tle, gdy miejsce staje się dostępne. Jeśli nie ma dostępnych komunikatów do dostarczenia, operacja odbierania opróżni bufor, a następnie czeka lub blokuje zgodnie z oczekiwaniami.

Dlaczego pobieranie wstępne nie jest opcją domyślną?

Wstępne pobieranie przyspiesza przepływ komunikatów, ponieważ komunikat jest łatwo dostępny dla lokalnego pobierania, zanim aplikacja poprosi o podanie komunikatu. Ten zysk przepływności jest wynikiem kompromisu, który autor aplikacji musi jawnie wprowadzić.

W przypadku korzystania z trybu odbierania i usuwania wszystkie komunikaty, które są pobierane do buforu pobierania wstępnego, nie są już dostępne w kolejce. Komunikaty pozostają tylko w buforze pobierania w pamięci, dopóki nie zostaną odebrane do aplikacji. Jeśli aplikacja kończy się przed odebraniem komunikatów do aplikacji, te komunikaty są nieodwracalne (utracone).

W przypadku korzystania z trybu odbierania blokady podglądu komunikaty pobierane do buforu pobierania wstępnego są pobierane do buforu w stanie zablokowanym. Czasomierz blokady rozpoczyna się od momentu, gdy komunikat zostanie wstępnie pobrany do buforu. Jeśli bufor pobierania wstępnego jest duży, a przetwarzanie trwa tak długo, że blokady komunikatów wygasają podczas pozostawania w buforze pobierania wstępnego, a nawet podczas przetwarzania komunikatu przez aplikację, może wystąpić pewne mylące zdarzenia do obsługi przez aplikację. Aplikacja może uzyskać komunikat z wygasłą lub nieuchronnie wygasającą blokadą. Jeśli tak, aplikacja może przetworzyć komunikat, ale okaże się, że nie może ukończyć komunikatu z powodu wygaśnięcia blokady. Aplikacja może sprawdzić LockedUntilUtc właściwość, ale należy pamiętać, że istnieje niesymetryczność zegara między brokerem i zegarem komputera lokalnego.

Jeśli blokada w trybie dyskretnym wygaśnie w buforze pobierania wstępnego, komunikat jest traktowany jako porzucony i jest ponownie udostępniany do pobierania z kolejki. Następnie komunikat zostanie ponownie pobrany do buforu pobierania wstępnego i umieszczony na końcu Jeśli bufor pobierania wstępnego nie może być zwykle przepracowany podczas wygasania komunikatów, komunikaty są wielokrotnie pobierane wstępnie, ale nigdy skutecznie dostarczane w stanie użytecznym (poprawnie zablokowanym) i są ostatecznie przenoszone do kolejki utraconych wiadomości po przekroczeniu maksymalnej liczby dostarczania.

Jeśli aplikacja jawnie porzuci komunikat, komunikat może być ponownie dostępny do pobrania z kolejki. Po włączeniu pobierania wstępnego komunikat zostanie ponownie pobrany do buforu pobierania wstępnego i umieszczony na końcu. Ponieważ komunikaty z buforu pobierania wstępnego są opróżniane w kolejności pierwszego wyjścia (FIFO), aplikacja może odbierać komunikaty poza kolejnością. Na przykład aplikacja może otrzymać komunikat o identyfikatorze 2, a następnie komunikat o identyfikatorze 1 (który został porzucony wcześniej) z buforu.

Jeśli potrzebujesz wysokiego stopnia niezawodności przetwarzania komunikatów, a przetwarzanie wymaga znacznej pracy i czasu, zalecamy użycie funkcji Pobierania wstępne w sposób konserwatywny lub w ogóle nie. Jeśli potrzebujesz wysokiej przepływności i przetwarzania komunikatów jest często tanie, pobieranie wstępne daje znaczne korzyści z przepływności.

Maksymalna liczba prefetch i czas trwania blokady skonfigurowany w kolejce lub subskrypcji muszą być zrównoważone, tak aby limit czasu blokady co najmniej przekracza skumulowany oczekiwany czas przetwarzania komunikatów dla maksymalnego rozmiaru buforu pobierania przed pobraniem oraz jeden komunikat. Jednocześnie czas trwania blokady nie powinien być tak długi, że komunikaty mogą przekraczać maksymalny czas wygaśnięcia podczas blokowania, ponieważ oznaczałoby to, że zostaną usunięte, jeśli nie można ich ukończyć, gdy zostaną pobrane wstępnie.

30 września 2026 r. wycofamy biblioteki zestawu SDK usługi Azure Service Bus WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus i com.microsoft.azure.servicebus, które nie są zgodne z wytycznymi dotyczącymi zestawu Azure SDK. Zakończymy również obsługę protokołu SBMP, więc nie będzie można już używać tego protokołu po 30 września 2026 r. Przeprowadź migrację do najnowszych bibliotek zestawu Azure SDK, które oferują krytyczne aktualizacje zabezpieczeń i ulepszone możliwości przed tą datą.

Mimo że starsze biblioteki mogą być nadal używane poza 30 września 2026 r., nie będą już otrzymywać oficjalnej pomocy technicznej i aktualizacji od firmy Microsoft. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu pomocy technicznej.