Compartilhar via


EventHubBufferedProducerClient.SendEventBatchFailedAsync Evento

Definição

Invocado para qualquer lote de eventos que não foram publicados no Hub de Eventos, esse manipulador deve ser fornecido antes que os eventos possam ser enfileirados. Se esse produtor não tiver sido configurado com e MaximumConcurrentSendsPerPartition ambos definidos como MaximumConcurrentSends 1, o manipulador será invocado simultaneamente.

É seguro tentar reenviar os eventos chamando EnqueueEventAsync(EventData, EnqueueEventOptions, CancellationToken) ou EnqueueEventsAsync(IEnumerable<EventData>, EnqueueEventOptions, CancellationToken) de dentro desse manipulador. É importante observar que isso os colocará no final do buffer; a ordem original não será mantida.

Esse manipulador será aguardado após a falha na publicação do lote; a operação de publicação não é considerada concluída até que a chamada do manipulador retorne. É recomendável que nenhuma operação de execução prolongada seja executada no manipulador para evitar afetar negativamente a taxa de transferência.

Não é recomendável invocar CloseAsync(Boolean, CancellationToken) ou DisposeAsync() desse manipulador; isso pode resultar em um cenário de deadlock se essas chamadas forem aguardadas.

public event Func<Azure.Messaging.EventHubs.Producer.SendEventBatchFailedEventArgs,System.Threading.Tasks.Task> SendEventBatchFailedAsync;
member this.SendEventBatchFailedAsync : Func<Azure.Messaging.EventHubs.Producer.SendEventBatchFailedEventArgs, System.Threading.Tasks.Task> 
Public Custom Event SendEventBatchFailedAsync As Func(Of SendEventBatchFailedEventArgs, Task) 

Tipo de evento

Exceções

Se for feita uma tentativa de remover um manipulador que não corresponde ao manipulador atual registrado.

Se for feita uma tentativa de adicionar um manipulador quando um estiver registrado no momento.

Comentários

Se ocorrer uma falha transitória durante a publicação, esse manipulador não será invocado imediatamente; ele só é invocado depois de aplicar a política de repetição e todas as tentativas qualificadas foram esgotadas. Se a publicação for bem-sucedida durante uma tentativa de repetição, esse manipulador não será invocado.

Como os aplicativos não têm controle determinístico sobre lotes com falha, é recomendável que o aplicativo defina um número generoso de repetições e intervalo de tempo limite de tentativa no RetryOptions. Isso permitirá a EventHubBufferedProducerClient maior chance de se recuperar de falhas transitórias. Isso é especialmente importante ao garantir que a ordem dos eventos seja necessária.

Não é necessário cancelar explicitamente o registro desse manipulador; ele será cancelado automaticamente quando CloseAsync(Boolean, CancellationToken) ou DisposeAsync() for invocado.

Aplica-se a

Confira também