Eccezioni della messaggistica di Hub eventi

Questo articolo elenca alcune eccezioni generate dall'API di messaggistica del bus di servizio di Azure, che include Hub eventi. Il documento è soggetto a modifica ed è quindi opportuno controllare periodicamente la presenza di aggiornamenti.

Categorie di eccezioni

Le API di Hub eventi generano eccezioni che possono essere raggruppate nelle categorie seguenti e a ognuna delle quali è associata un'azione che è possibile eseguire per tentare di risolverla.

  1. Errore nella codifica dell'utente: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException. Azione generale: provare a correggere il codice prima di continuare.
  2. Errore di configurazione/installazione: Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, Microsoft.Azure.EventHubs.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Azione generale: controllare la configurazione e modificarla, se necessario.
  3. Eccezioni temporanee: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.Azure.EventHubs.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException. Azione generale: ripetere l'operazione o inviare una notifica agli utenti.
  4. Altre eccezioni: System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException. Azione generale: specifica per il tipo di eccezione. Fare riferimento alla tabella nella sezione seguente.

Tipi di eccezioni

La tabella seguente elenca i tipi di eccezioni di messaggistica, ne riporta le possibili cause, e indica l'azione suggerita che è possibile eseguire.

Tipo di eccezione Descrizione/Causa/Esempi Azione suggerita Nota sulla ripetizione automatica/immediata
TimeoutException Il server non ha risposto all'operazione richiesta entro l'intervallo di tempo specificato, controllato dalla proprietà OperationTimeout. Il server può aver completato l'operazione richiesta. L'eccezione può verificarsi a causa di ritardi a livello di rete o di infrastruttura. Controllare lo stato del sistema per verificarne la coerenza e, se necessario, ripetere l'operazione.
Vedere TimeoutException.
In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.
InvalidOperationException L'operazione richiesta dall'utente non è consentita nell'ambito del server o del servizio. Per informazioni dettagliate, vedere il messaggio di eccezione. Ad esempio, Complete genera questa eccezione se il messaggio è stato ricevuto in modalità ReceiveAndDelete . Controllare il codice e la documentazione. Assicurarsi che l'operazione richiesta sia valida. Ripetere l'operazione non serve.
OperationCanceledException È stato eseguito un tentativo di richiamare un'operazione su un oggetto già chiuso, interrotto o eliminato. In alcuni casi rari, la transazione di ambiente è già stata eliminata. Controllare il codice e assicurarsi che non richiami operazioni su un oggetto eliminato. Ripetere l'operazione non serve.
UnauthorizedAccessException L'oggetto TokenProvider non è riuscito ad acquisire un token oppure il token non è valido o non contiene le attestazioni necessarie per eseguire l'operazione. Assicurarsi che il provider di token sia stato creato con i valori corretti. Controllare la configurazione del servizio di controllo di accesso. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Uno o più argomenti forniti al metodo non sono validi. L'URI fornito a NamespaceManager o Create contiene segmenti di percorso. Lo schema URI fornito a NamespaceManager o Create non è valido. Il valore della proprietà è maggiore di 32 KB. Controllare il codice chiamante e assicurarsi che gli argomenti siano corretti. Ripetere l'operazione non serve.
Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException
Microsoft.Azure.EventHubs.MessagingEntityNotFoundException
L'entità associata all'operazione non esiste o è stata eliminata. Assicurarsi che l'entità esista. Ripetere l'operazione non serve.
MessageNotFoundException Tentativo di ricevere un messaggio con un particolare numero di sequenza. Non è stato trovato questo messaggio. Assicurarsi che il messaggio non sia già stato ricevuto. Controllare la coda dei messaggi non recapitabili per verificare che il messaggio non si trovi al suo interno. Ripetere l'operazione non serve.
MessagingCommunicationException Il client non riesce a stabilire una connessione con Hub eventi. Assicurarsi che il nome host fornito sia corretto e l'host sia raggiungibile. Se sono presenti problemi di connettività intermittente, può essere utile ripetere l'operazione.
Microsoft.ServiceBus.Messaging.ServerBusyException
Microsoft.Azure.EventHubs.ServerBusyException
In questo momento il servizio non è in grado di elaborare la richiesta. Il client può attendere per un certo periodo di tempo ed è quindi opportuno ripetere l'operazione.
Vedere ServerBusyException.
Il client può riprovare dopo un determinato intervallo. Se viene generata un'eccezione diversa, controllare il comportamento di ripetizione del tentativo della nuova eccezione.
MessageLockLostException Il token di blocco associato al messaggio è scaduto o non è disponibile. Eliminare il messaggio. Ripetere l'operazione non serve.
SessionLockLostException È stato perso il blocco associato a questa sessione. Interrompere l'oggetto MessageSession . Ripetere l'operazione non serve.
MessagingException Eccezione di messaggistica generica che può essere generata nei casi seguenti: È stato eseguito un tentativo di creare una classe QueueClient usando un nome o un percorso appartenente a un tipo di entità diverso, ad esempio un argomento. È stato eseguito un tentativo di inviare un messaggio di dimensioni superiori a 256 KB. Si è verificato un errore nel server o nel servizio durante l'elaborazione della richiesta. Per informazioni dettagliate, vedere il messaggio di eccezione. Si tratta in genere di un'eccezione temporanea. Controllare il codice e verificare che per il corpo del messaggio siano stati usati solo oggetti serializzabili (oppure usare un serializzatore personalizzato). Consultare la documentazione per identificare i tipi di valori delle proprietà supportati e usare solo quelli. Controllare la proprietà IsTransient . Se è true, è possibile ripetere l'operazione. Il comportamento di ripetizione dei tentativi non è definito e ripetere l'operazione può non essere utile.
MessagingEntityAlreadyExistsException È stato eseguito un tentativo di creare un'entità con un nome già usato da un'altra entità dello stesso spazio dei nomi del servizio. Eliminare l'entità esistente o scegliere un nome diverso per l'entità da creare. Ripetere l'operazione non serve.
QuotaExceededException L'entità di messaggistica ha raggiunto le dimensioni massime consentite. Questa situazione può verificarsi se a livello di gruppo di consumer è già stato aperto il numero massimo di ricevitori, ovvero 5. Creare spazio nell'entità mediante la ricezione di messaggi dall'entità o dalle relative code secondarie.
Vedere QuotaExceededException
Se nel frattempo sono stati rimossi i messaggi, può essere utile ripetere l'operazione.
SessionCannotBeLockedException È stato eseguito un tentativo di accettare una sessione con un ID di sessione specifico, ma la sessione è attualmente bloccata da un altro client. Assicurarsi che la sessione venga sbloccata dagli altri client. Se nel frattempo la sessione è stata rilasciata, può essere utile ripetere l'operazione.
TransactionSizeExceededException Nella transazione sono presenti troppe operazioni. Ridurre il numero di operazioni presenti nella transazione. Ripetere l'operazione non serve.
MessagingEntityDisabledException È stata inoltrata una richiesta per un'operazione di runtime su un'entità disattivata. Attivare l'entità. Se nel frattempo l'entità è stata attivata, può essere utile ripetere l'operazione.
Microsoft.ServiceBus.Messaging.MessageSizeExceededException
Microsoft.Azure.EventHubs.MessageSizeExceededException
Un payload del messaggio supera il limite di 256 KB. Il limite di 256 KB è la dimensione totale del messaggio, che può includere proprietà di sistema ed eventuali overhead .NET. Ridurre le dimensioni del payload del messaggio e quindi ripetere l'operazione. Ripetere l'operazione non serve.
TransactionException La transazione di ambiente (Transaction.Current) non è valida. È possibile che nel frattempo sia stata interrotta o completata. L'eccezione interna può fornire informazioni aggiuntive. Ripetere l'operazione non serve.
TransactionInDoubtException È stata tentata un'operazione su una transazione in dubbio oppure è stato tentato di eseguire il commit della transazione e la transazione è diventata in dubbio. L'applicazione deve gestire questa eccezione (come caso speciale), poiché è possibile che sia già stato eseguito il commit della transazione. -

QuotaExceededException

QuotaExceededException indica che è stata superata la quota di un'entità specifica.

Questa situazione può verificarsi se a livello di gruppo di consumer è già stato aperto il numero massimo di (5) ricevitori.

Hub eventi

Hub eventi ha un limite di 20 gruppi di utenti per Hub eventi. Quando si tenta di creare più gruppi, si riceve un'eccezione di tipo QuotaExceededException.

TimeoutException

Un'eccezione di tipo TimeoutException indica che un'operazione avviata dall'utente richiede più tempo rispetto al timeout dell'operazione.

Per Hub eventi, il timeout è specificato come parte della stringa di connessione o tramite ServiceBusConnectionStringBuilder. Il messaggio di errore stesso può variare, ma contiene sempre il valore di timeout specificato per l'operazione corrente.

Cause comuni

Per questo errore, esistono due cause comuni: una configurazione errata o un errore temporaneo del servizio.

  1. Configurazione errata : il valore di timeout dell'operazione potrebbe essere troppo ridotto per la condizione operativa. Il valore predefinito per il timeout dell'operazione dell'SDK client è 60 secondi. Verificare se il codice contiene un valore troppo piccolo. Si noti che la condizione relativa all'utilizzo della rete e della CPU può influire sul tempo necessario per il completamento di una determinata operazione, pertanto il timeout dell'operazione non deve essere impostato su un valore troppo piccolo.
  2. Errore temporaneo del servizio : a volte il servizio di Hub eventi può subire ritardi nell'elaborazione delle richieste, ad esempio durante periodi di traffico elevato. In questi casi, è possibile ritentare l'operazione dopo un ritardo fino a quando l'operazione ha esito positivo. Se la stessa operazione ha ancora esito negativo dopo diversi tentativi, visitare il sito sullo stato dei servizi Azure per verificare se esistono casi noti di interruzioni del servizio.

ServerBusyException

Microsoft.ServiceBus.Messaging.ServerBusyException o Microsoft.Azure.EventHubs.ServerBusyException indicano che il server è sovraccarico. Esistono due codici di errore relativi a questa eccezione.

Codice di errore 50002

Questo errore può verificarsi per uno dei due motivi:

  1. Il carico non viene distribuito uniformemente su tutte le partizioni nell'Hub eventi e una partizione raggiunge il limite dell'unità di velocità effettiva locale.

    Risoluzione: rivedere la strategia di distribuzione della partizione o provare con EventHubClient.Send(eventDataWithOutPartitionKey).

  2. Lo spazio dei nomi di Hub eventi non dispone di unità di velocità effettiva sufficienti (per conferma, è possibile controllare il pannello Metrica nel pannello dello spazio dei nomi di Hub eventi nel Portale di Azure). Si noti che il portale mostra le informazioni aggregate (1 minuto), ma viene misurata la velocità effettiva in tempo reale, quindi si tratta solo di una stima.

    Risoluzione: aumentare le unità di velocità effettiva nello spazio dei nomi. È possibile farlo nel portale, nel pannello Scalabilità del pannello di spazio dei nomi di Hub eventi.

Codice errore 50001

Questo errore si verifica raramente. Si verifica quando il contenitore che esegue il codice per lo spazio dei nomi è insufficiente per la CPU, occorrono pochi secondi prima che il bilanciamento del carico dell'Hub eventi inizi.

Passaggi successivi

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti: