Partilhar via


EventHubBufferedProducerClient Classe

Definição

Um cliente responsável por publicar instâncias de em um Hub de EventData Eventos específico. Dependendo das opções especificadas quando os eventos são enfileirados, eles podem ser atribuídos automaticamente a uma partição, agrupados de acordo com a chave de partição especificada ou atribuídos a uma partição solicitada especificamente.

O EventHubBufferedProducerClient não publica imediatamente, em vez disso, usando um modelo adiado em que os eventos são coletados em um buffer para que possam ser colocados em lote e publicados com eficiência quando o lote estiver cheio ou o MaximumWaitTime tiver decorrido sem novos eventos enfileirados.

Esse modelo destina-se a deslocar a carga do gerenciamento em lote dos chamadores, ao custo do tempo não determinístico, para quando os eventos serão publicados. Também há compensações adicionais a serem consideradas:

  • Se o aplicativo falhar, os eventos no buffer não terão sido publicados. Para evitar a perda de dados, os chamadores são incentivados a acompanhar o progresso da publicação usando os SendEventBatchSucceededAsync manipuladores e SendEventBatchFailedAsync .
  • Os eventos que especificam uma chave de partição podem receber uma partição diferente daquelas que usam a mesma chave com outros produtores.
  • No caso improvável de uma partição ficar temporariamente indisponível, o EventHubBufferedProducerClient pode levar mais tempo para ser recuperado do que outros produtores.

Em cenários em que é importante ter eventos publicados imediatamente com um resultado determinístico, verifique se as chaves de partição são atribuídas a uma partição consistente com outros editores ou quando a maximização da disponibilidade é um requisito, usando o EventHubProducerClient é recomendado.

public class EventHubBufferedProducerClient : IAsyncDisposable
type EventHubBufferedProducerClient = class
    interface IAsyncDisposable
Public Class EventHubBufferedProducerClient
Implements IAsyncDisposable
Herança
EventHubBufferedProducerClient
Implementações

Comentários

O EventHubBufferedProducerClient é seguro para armazenar em cache e usar como singleton durante o tempo de vida de um aplicativo, que é a abordagem recomendada. O produtor é responsável por garantir o uso eficiente de rede, CPU e memória. Chamar ou CloseAsync(Boolean, CancellationToken)DisposeAsync() quando não houver mais eventos será enfileirado ou como o aplicativo está sendo desligado é necessário para que o buffer possa ser liberado e os recursos sejam limpos corretamente.

Construtores

EventHubBufferedProducerClient()

Usado para zombar do produtor para fins de teste.

EventHubBufferedProducerClient(EventHubConnection, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, String)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, String, AzureNamedKeyCredential, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, String, AzureSasCredential, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, String, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

EventHubBufferedProducerClient(String, String, TokenCredential, EventHubBufferedProducerClientOptions)

Inicializa uma nova instância da classe EventHubBufferedProducerClient.

Propriedades

EventHubName

O nome do Hub de Eventos ao qual esse produtor está conectado, específico ao namespace dos Hubs de Eventos que o contém.

FullyQualifiedNamespace

O namespace dos Hubs de Eventos totalmente qualificado ao qual esse produtor está associado no momento, que provavelmente será semelhante a {yournamespace}.servicebus.windows.net.

Identifier

Um nome exclusivo para identificar o produtor armazenado em buffer.

IsClosed

Indica se isso EventHubBufferedProducerClient foi ou não fechado.

IsPublishing

Indica se isso EventHubBufferedProducerClient está ativo ou não no momento e publica eventos na fila.

TotalBufferedEventCount

O número total de eventos atualmente armazenados em buffer e aguardando para serem publicados em todas as partições.

Métodos

CloseAsync(Boolean, CancellationToken)

Fecha o produtor e executa as tarefas necessárias para limpo todos os recursos usados pelo EventHubBufferedProducerClient.

DisposeAsync()

Fecha o produtor e executa as tarefas necessárias para limpo todos os recursos usados pelo EventHubBufferedProducerClient.

EnqueueEventAsync(EventData, CancellationToken)

Enfileira um EventData no buffer a ser publicado no Hub de Eventos. Se não houver capacidade no buffer quando esse método for invocado, ele aguardará o espaço ficar disponível e garantirá que o eventData tenha sido enfileirado.

Quando essa chamada retorna, o eventData foi aceito no buffer, mas pode não ter sido publicado ainda. A publicação ocorrerá em um ponto não determinístico no futuro à medida que o buffer for processado.

EnqueueEventAsync(EventData, EnqueueEventOptions, CancellationToken)

Enfileira um EventData no buffer a ser publicado no Hub de Eventos. Se não houver capacidade no buffer quando esse método for invocado, ele aguardará o espaço ficar disponível e garantirá que o eventData tenha sido enfileirado.

Quando essa chamada retorna, o eventData foi aceito no buffer, mas pode não ter sido publicado ainda. A publicação ocorrerá em um ponto não determinístico no futuro à medida que o buffer for processado.

EnqueueEventsAsync(IEnumerable<EventData>, CancellationToken)

Enfileira um conjunto de EventData no buffer a ser publicado no Hub de Eventos. Se não houver capacidade suficiente no buffer quando esse método for invocado, ele aguardará o espaço ficar disponível e garantirá que todos events no events conjunto tenham sido enfileirados.

Quando essa chamada retorna, o events foi aceito no buffer, mas pode não ter sido publicado ainda. A publicação ocorrerá em um ponto não determinístico no futuro à medida que o buffer for processado.

EnqueueEventsAsync(IEnumerable<EventData>, EnqueueEventOptions, CancellationToken)

Enfileira um conjunto de EventData no buffer a ser publicado no Hub de Eventos. Se não houver capacidade suficiente no buffer quando esse método for invocado, ele aguardará o espaço ficar disponível e garantirá que todos events no events conjunto tenham sido enfileirados.

Quando essa chamada retorna, o events foi aceito no buffer, mas pode não ter sido publicado ainda. A publicação ocorrerá em um ponto não determinístico no futuro à medida que o buffer for processado.

FlushAsync(CancellationToken)

Tenta publicar todos os eventos no buffer imediatamente. Isso pode resultar na publicação de vários lotes, o resultado de cada um deles será relatado individualmente pelos SendEventBatchSucceededAsync manipuladores e SendEventBatchFailedAsync .

Após a conclusão desse método, o buffer estará vazio.

GetBufferedEventCount(String)

O número de eventos armazenados em buffer e aguardando para serem publicados para uma determinada partição.

GetEventHubPropertiesAsync(CancellationToken)

Recupera informações sobre o Hub de Eventos ao qual a conexão está associada, incluindo o número de partições presentes e seus identificadores.

GetPartitionIdsAsync(CancellationToken)

Recupera o conjunto de identificadores para as partições de um Hub de Eventos.

GetPartitionPropertiesAsync(String, CancellationToken)

Recupera informações sobre uma partição específica para um Hub de Eventos, incluindo elementos que descrevem os eventos disponíveis no fluxo de eventos de partição.

ListPartitionIdsAsync(EventHubProducerClient, CancellationToken)

Consultas para os identificadores das partições do Hub de Eventos.

OnSendFailedAsync(IReadOnlyList<EventData>, Exception, String, CancellationToken)

Responsável por gerar o SendEventBatchFailedAsync evento após a publicação com falha de um lote de eventos, depois que todas as tentativas qualificadas forem esgotadas.

OnSendSucceededAsync(IReadOnlyList<EventData>, String, CancellationToken)

Responsável por gerar o SendEventBatchSucceededAsync evento após a publicação bem-sucedida de um lote de eventos.

Eventos

SendEventBatchFailedAsync

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.

SendEventBatchSucceededAsync

Invocado depois que cada lote de eventos tiver sido publicado com êxito no Hub de Eventos, esse manipulador é opcional e se destina a fornecer notificações para ouvintes interessados. Se esse produtor tiver sido configurado com MaximumConcurrentSends ou MaximumConcurrentSendsPerPartition definido com mais de 1, o manipulador será invocado simultaneamente.

Esse manipulador será aguardado após a publicação do lote; a operação de publicação não será 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.

Aplica-se a

Confira também