Wyjątki obsługi komunikatów usługi Event Hubs — .NET (starsza wersja)
W tej sekcji wymieniono wyjątki platformy .NET wygenerowane przez interfejsy API programu .NET Framework.
Ważne
Niektóre wyjątki wymienione w artykule dotyczą tylko starszej biblioteki platformy .NET usługi Event Hubs. Na przykład: wyjątki Microsoft.ServiceBus.*
Aby uzyskać informacje na temat zdarzenia EventHubsException zgłoszonego przez nową bibliotekę platformy .NET, zobacz EventHubsException — .NET
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.
Kategorie wyjątków
Interfejsy API platformy .NET usługi Event Hubs generują wyjątki, które mogą należeć do następujących kategorii, wraz ze skojarzona akcjami, które można wykonać, aby spróbować je naprawić:
Błąd kodowania użytkownika:
- System.argumentexception
- System.invalidoperationexception
- System.OperationCanceledException
- System.Runtime.Serialization.SerializationException
Akcja ogólna: spróbuj naprawić kod przed kontynuowaniem.
Błąd instalacji/konfiguracji:
- Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException
- Microsoft.Azure.EventHubs.MessagingEntityNotFoundException
- System.UnauthorizedAccessException
Akcja ogólna: Przejrzyj konfigurację i w razie potrzeby zmień.
Wyjątki przejściowe:
- Microsoft.ServiceBus.Messaging.MessagingException
- Microsoft.ServiceBus.Messaging.ServerBusyException
- Microsoft.Azure.EventHubs.ServerBusyException
- Microsoft.ServiceBus.Messaging.MessagingCommunicationException
Akcja ogólna: spróbuj ponownie wykonać operację lub powiadomić użytkowników.
Inne wyjątki:
- System.Transactions.TransactionException
- System.timeoutexception
- Microsoft.ServiceBus.Messaging.MessageLockLostException
- Microsoft.ServiceBus.Messaging.SessionLockLostException
Akcja ogólna: specyficzne dla typu wyjątku; zapoznaj się z tabelą w poniższej sekcji.
Typy wyjątków
W poniższej tabeli wymieniono typy wyjątków obsługi komunikatów oraz ich przyczyny oraz sugerowane działania, które można wykonać.
Typ wyjątku | Opis/przyczyna/przykłady | Sugerowana akcja | Uwaga dotycząca automatycznego/natychmiastowego ponawiania próby |
---|---|---|---|
TimeoutException | Serwer nie odpowiedział na żądaną operację w określonym czasie, która jest kontrolowana przez operację OperationTimeout. Serwer mógł ukończyć żądaną operację. Ten wyjątek może wystąpić z powodu opóźnień sieci lub innej infrastruktury. | Sprawdź stan systemu pod kątem spójności i spróbuj ponownie, jeśli to konieczne. Zobacz TimeoutException. |
Ponów próbę może pomóc w niektórych przypadkach; dodaj logikę ponawiania prób do kodu. |
InvalidOperationException | Żądana operacja użytkownika nie jest dozwolona na serwerze ani w usłudze. Aby uzyskać szczegółowe informacje, zobacz komunikat o wyjątku. Na przykład Complete generuje ten wyjątek, jeśli komunikat został odebrany w trybie ReceiveAndDelete. | Sprawdź kod i dokumentację. Upewnij się, że żądana operacja jest prawidłowa. | Ponów próbę nie pomoże. |
Operationcanceledexception | Podjęto próbę wywołania operacji na obiekcie, który został już zamknięty, przerwany lub usunięty. W rzadkich przypadkach transakcja otoczenia jest już usuwana. | Sprawdź kod i upewnij się, że nie wywołuje operacji na usuniętym obiekcie. | Ponów próbę nie pomoże. |
Unauthorizedaccessexception | Obiekt TokenProvider nie może uzyskać tokenu, token jest nieprawidłowy lub token nie zawiera oświadczeń wymaganych do wykonania operacji. | Upewnij się, że dostawca tokenu został utworzony przy użyciu poprawnych wartości. Sprawdź konfigurację usługi kontroli dostępu. | Ponów próbę może pomóc w niektórych przypadkach; dodaj logikę ponawiania prób do kodu. |
ArgumentException Argumentnullexception ArgumentOutOfRangeException |
Co najmniej jeden argument dostarczony do metody jest nieprawidłowy. Identyfikator URI dostarczony do elementu NamespaceManager lub Create zawiera segmenty ścieżki. Schemat identyfikatora URI dostarczony do elementu NamespaceManager lub Create jest nieprawidłowy. Wartość właściwości jest większa niż 32 KB. | Sprawdź kod wywołujący i upewnij się, że argumenty są poprawne. | Ponów próbę nie pomoże. |
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundException Microsoft.Azure.EventHubs MessagingEntityNotFoundException |
Jednostka skojarzona z operacją nie istnieje lub została usunięta. | Upewnij się, że jednostka istnieje. | Ponów próbę nie pomoże. |
MessagingCommunicationException | Klient nie może nawiązać połączenia z usługą Event Hubs. | Upewnij się, że podana nazwa hosta jest poprawna, a host jest osiągalny. | Ponów próbę może pomóc, jeśli występują sporadyczne problemy z łącznością. |
Microsoft.ServiceBus.Messaging ServerBusyException Microsoft.Azure.EventHubs ServerBusyException |
Usługa nie może obecnie przetworzyć żądania. | Klient może czekać przez pewien czas, a następnie ponowić próbę wykonania operacji. Zobacz ServerBusyException. |
Klient może ponowić próbę po pewnym interwale. Jeśli ponowienie próby spowoduje wystąpienie innego wyjątku, sprawdź zachowanie ponawiania próby dla tego wyjątku. |
MessagingException | Ogólny wyjątek obsługi komunikatów, który może zostać zgłoszony w następujących przypadkach: Podjęto próbę utworzenia klasy QueueClient przy użyciu nazwy lub ścieżki należącej do innego typu jednostki (na przykład tematu). Podjęto próbę wysłania komunikatu o rozmiarze większym niż 1 MB. Serwer lub usługa napotkała błąd podczas przetwarzania żądania. Aby uzyskać szczegółowe informacje, zobacz komunikat o wyjątku. Ten wyjątek jest zwykle wyjątkiem przejściowym. | Sprawdź kod i upewnij się, że dla treści komunikatu są używane tylko obiekty możliwe do serializacji (lub użyj niestandardowego serializatora). Zapoznaj się z dokumentacją obsługiwanych typów wartości właściwości i użyj tylko obsługiwanych typów. Sprawdź właściwość IsTransient. Jeśli to prawda, możesz ponowić próbę wykonania operacji. | Zachowanie ponawiania prób jest niezdefiniowane i może nie pomóc. |
MessagingEntityAlreadyExistsException | Spróbuj utworzyć jednostkę o nazwie, która jest już używana przez inną jednostkę w tej przestrzeni nazw usługi. | Usuń istniejącą jednostkę lub wybierz inną nazwę jednostki do utworzenia. | Ponów próbę nie pomoże. |
Quotaexceededexception | Jednostka obsługi komunikatów osiągnęła maksymalny dozwolony rozmiar. Ten wyjątek może wystąpić, jeśli maksymalna liczba odbiorników (czyli 5) została już otwarta na poziomie grupy poszczególnych konsumentów. | Utwórz miejsce w jednostce, odbierając komunikaty z jednostki lub jej podzapytania. Zobacz QuotaExceededException |
Ponów próbę może pomóc, jeśli komunikaty zostały usunięte w międzyczasie. |
MessagingEntityDisabledException | Żądanie wykonania operacji na wyłączonej jednostce. | Aktywuj jednostkę. | Ponów próbę może pomóc, jeśli jednostka została aktywowana w międzyczasie. |
Microsoft.ServiceBus.Messaging MessageSizeExceededException Microsoft.Azure.EventHubs MessageSizeExceededException |
Ładunek komunikatu przekracza limit 1 MB. Ten limit wynoszący 1 MB dotyczy całkowitego komunikatu, który może obejmować właściwości systemu i wszelkie obciążenia związane z platformą .NET. | Zmniejsz rozmiar ładunku komunikatu, a następnie spróbuj ponownie wykonać operację. | Ponów próbę nie pomoże. |
Quotaexceededexception
Wyjątek QuotaExceededException wskazuje, że przekroczono limit przydziału dla określonej jednostki.
Ten wyjątek może wystąpić, jeśli maksymalna liczba odbiorników (5) została już otwarta na poziomie grupy poszczególnych konsumentów.
Event Hubs
Usługa Event Hubs ma limit 20 grup odbiorców na usługę Event Hubs. Podczas próby utworzenia większej liczby wystąpi wyjątek QuotaExceededException.
TimeoutException
Wyjątek TimeoutException zazwyczaj wskazuje na to, że operacja zainicjowana przez użytkownika zajmuje więcej czasu niż wynosi limit czasu dla operacji.
W przypadku usługi Event Hubs limit czasu jest określony jako część parametrów połączenia lub za pośrednictwem klasy ServiceBusConnectionStringBuilder. Sam komunikat o błędzie może się różnić, ale zawsze zawiera wartość limitu czasu określoną dla bieżącej operacji.
Oczekuje się, że przekroczenia limitów czasu będą mieć miejsce podczas operacji konserwacji lub między nimi, takich jak aktualizacje usługi Event Hubs (lub) aktualizacje systemu operacyjnego dotyczące zasobów, na których jest uruchamiana usługa. Podczas aktualizacji systemu operacyjnego jednostki są przenoszone, a węzły aktualizowane lub ponownie uruchamiane, co może powodować przekraczanie limitów czasu. Aby uzyskać szczegółowe informacje o umowie dotyczącej poziomu usług (SLA) dla usługi Azure Event Hubs, zobacz Umowa SLA dla usługi Event Hubs.
Typowe przyczyny
Istnieją dwie typowe przyczyny tego błędu: nieprawidłowa konfiguracja lub błąd usługi przejściowej.
- Nieprawidłowa konfiguracja Przekroczenie limitu czasu operacji może być zbyt małe dla warunku operacyjnego. Wartość domyślna limitu czasu operacji w zestawie SDK klienta wynosi 60 sekund. Sprawdź, czy kod ma ustawioną wartość na zbyt małą. Warunek użycia sieci i procesora CPU może mieć wpływ na czas potrzebny na ukończenie określonej operacji, więc limit czasu operacji nie powinien być ustawiony na niewielką wartość.
- Przejściowy błąd usługi Czasami usługa Event Hubs może doświadczać opóźnień w przetwarzaniu żądań, na przykład w okresach dużego ruchu. W takich przypadkach można ponowić próbę wykonania operacji po opóźnieniu, aż operacja zakończy się pomyślnie. Jeśli ta sama operacja nadal kończy się niepowodzeniem po wielu próbach, odwiedź witrynę stanu usługi platformy Azure, aby sprawdzić, czy występują jakieś znane awarie usługi.
ServerBusyException
Wyjątek Microsoft.ServiceBus.Messaging.ServerBusyException lub Microsoft.Azure.EventHubs.ServerBusyException wskazuje, że serwer jest przeciążony. Istnieją dwa istotne kody błędów dla tego wyjątku.
Kod błędu 50002
Ten błąd może wystąpić z jednego z dwóch powodów:
Obciążenie nie jest równomiernie dystrybuowane we wszystkich partycjach w centrum zdarzeń, a jedna partycja osiąga ograniczenie lokalnej jednostki przepływności.
Rozwiązanie: może pomóc zmiana strategii dystrybucji partycji lub wypróbowanie elementu EventHubClient.Send(eventDataWithOutPartitionKey).
Przestrzeń nazw usługi Event Hubs nie ma wystarczających jednostek przepływności (możesz sprawdzić ekran Metryki w oknie przestrzeni nazw usługi Event Hubs w witrynie Azure Portal , aby potwierdzić). Portal wyświetla zagregowane (1 minutę) informacje, ale mierzymy przepływność w czasie rzeczywistym — więc jest to tylko oszacowanie.
Rozwiązanie: Zwiększenie liczby jednostek przepływności w przestrzeni nazw może pomóc.
Jednostki przepływności można skonfigurować na stronie Skalowanie lub na stronie Przegląd strony przestrzeni nazw usługi Event Hubs w witrynie Azure Portal. Możesz też użyć automatycznego rozszerzania, który automatycznie skaluje się w górę, zwiększając liczbę jednostek przepływności, aby zaspokoić potrzeby użycia.
Jednostki przepływności mają zastosowanie do wszystkich centrów zdarzeń w przestrzeni nazw usługi Event Hubs. Oznacza to, że jednostki TU są kupowane na poziomie przestrzeni nazw i są współużytkowane przez centra zdarzeń w ramach tej przestrzeni nazw. Każdy tu uprawnia przestrzeń nazw do następujących możliwości:
- Do 1 MB na sekundę dla zdarzeń związanych z transferem danych przychodzących (zdarzeń wysyłanych do centrum zdarzeń), ale nie więcej niż 1000 zdarzeń przychodzących, operacji zarządzania lub wywołań interfejsu API sterowania na sekundę.
- Do 2 MB na sekundę dla zdarzeń związanych z transferem danych wychodzących (używanych zdarzeń z centrum zdarzeń), ale nie więcej niż 4096 zdarzeń wychodzących.
- Do 84 GB magazynu zdarzeń (wystarczy do domyślnego 1-godzinnego okresu przechowywania).
Na stronie Przegląd w sekcji Pokaż metryki przejdź do karty Przepływność. Wybierz wykres, aby otworzyć go w większym oknie z 1-minutowymi interwałami na osi x. Przyjrzyj się wartościom szczytowym i podziel je przez 60, aby uzyskać bajty przychodzące/sekundy lub bajty wychodzące/sekundy. Użyj podobnego podejścia, aby obliczyć liczbę żądań na sekundę w godzinach szczytu na karcie Żądania .
Jeśli zobaczysz wartości wyższe niż liczba jednostek RU * limity (1 MB na sekundę dla ruchu przychodzącego lub 1000 żądań dla ruchu przychodzącego/sekundowego, 2 MB na sekundę dla ruchu wychodzącego), zwiększ liczbę jednostek RU przy użyciu strony Skalowanie (w menu po lewej stronie) przestrzeni nazw usługi Event Hubs w celu ręcznego skalowania wyższego lub użycia funkcji automatycznego rozszerzania usługi Event Hubs. Skalowanie w górę do 40 jednostek TU można skalować ręcznie lub automatycznie skalować przestrzeń nazw.
Kod błędu 50008
Ten błąd powinien rzadko występować. Dzieje się tak, gdy kontener uruchamiający kod dla przestrzeni nazw jest niski na procesorze CPU — nie więcej niż kilka sekund przed rozpoczęciem modułu równoważenia obciążenia usługi Event Hubs.
Rozwiązanie: Ogranicz wywołania metody GetRuntimeInformation. Usługa Azure Event Hubs obsługuje maksymalnie 50 wywołań na sekundę na grupę odbiorców do polecenia GetRuntimeInfo na sekundę. Po osiągnięciu limitu może zostać wyświetlony wyjątek podobny do następującego:
ExceptionId: 00000000000-00000-0000-a48a-9c908fbe84f6-ServerBusyException: The request was terminated because the namespace 75248:aaa-default-eventhub-ns-prodb2b is being throttled. Error code : 50008. Please wait 10 seconds and try again.
Następne kroki
Następujące linki pozwalają dowiedzieć się więcej na temat usługi Event Hubs: