Compartilhar via


EventHubProducerClient Classe

  • java.lang.Object
    • com.azure.messaging.eventhubs.EventHubProducerClient

Implementações

public class EventHubProducerClient
implements Closeable

Um produtor síncrono responsável pela transmissão EventData para um Hub de Eventos específico, agrupado em lotes. Dependendo do CreateBatchOptions especificado ao criar um EventDataBatch, os eventos podem ser roteados automaticamente para uma partição disponível ou específicos para uma partição. Mais informações e recomendações específicas para estratégias a serem usadas ao publicar eventos em: Distribuir eventos para partições

É recomendável permitir o roteamento automático de partições quando:

  • O envio de eventos precisa estar altamente disponível.
  • Os dados do evento devem ser distribuídos uniformemente entre todas as partições disponíveis.

Se nenhuma ID de partição for especificada, as seguintes regras serão usadas para selecionar automaticamente uma:

  1. Distribua os eventos igualmente entre todas as partições disponíveis usando uma abordagem round robin.
  2. Se uma partição ficar indisponível, o serviço hubs de eventos a detectará automaticamente e encaminhará a mensagem para outra partição disponível.

Os exemplos mostrados neste documento usam um objeto de credencial chamado DefaultAzureCredential para autenticação, que é apropriado para a maioria dos cenários, incluindo ambientes locais de desenvolvimento e produção. Além disso, recomendamos usar a identidade gerenciada para autenticação em ambientes de produção. Você pode encontrar mais informações sobre diferentes maneiras de autenticação e seus tipos de credencial correspondentes na documentação da Identidade do Azure".

Exemplo: Construir um EventHubProducerClient

O exemplo de código a seguir demonstra a criação do cliente EventHubProducerClientsíncrono. O fullyQualifiedNamespace é o nome do host do Namespace dos Hubs de Eventos. Ele é listado no painel "Essentials" depois de navegar até o Namespace dos Hubs de Eventos por meio do Portal do Azure.

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 // "<<fully-qualified-namespace>>" will look similar to "{your-namespace}.servicebus.windows.net"
 // "<<event-hub-name>>" will be the name of the Event Hub instance you created inside the Event Hubs namespace.
 EventHubProducerClient producer = new EventHubClientBuilder()
     .credential("<<fully-qualified-namespace>>", "<<event-hub-name>>",
         credential)
     .buildProducerClient();

Exemplo: criar um produtor e publicar eventos em qualquer partição

O exemplo de código a seguir demonstra eventos de publicação e permite que o serviço distribua o round robin de eventos entre todas as partições.

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 EventHubProducerClient producer = new EventHubClientBuilder()
     .credential("<<fully-qualified-namespace>>", "<<event-hub-name>>",
         credential)
     .buildProducerClient();

 List<EventData> allEvents = Arrays.asList(new EventData("Foo"), new EventData("Bar"));
 EventDataBatch eventDataBatch = producer.createBatch();

 for (EventData eventData : allEvents) {
     if (!eventDataBatch.tryAdd(eventData)) {
         producer.send(eventDataBatch);
         eventDataBatch = producer.createBatch();

         // Try to add that event that couldn't fit before.
         if (!eventDataBatch.tryAdd(eventData)) {
             throw new IllegalArgumentException("Event is too large for an empty batch. Max size: "
                 + eventDataBatch.getMaxSizeInBytes());
         }
     }
 }

 // send the last batch of remaining events
 if (eventDataBatch.getCount() > 0) {
     producer.send(eventDataBatch);
 }

 // Clients are expected to be long-lived objects.
 // Dispose of the producer to close any underlying resources when we are finished with it.
 producer.close();

Exemplo: publicar eventos na partição "0"

O exemplo de código a seguir demonstra eventos de publicação em uma partição específica. No cenário abaixo, todos os eventos são enviados para a partição "0".

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 EventHubProducerClient producer = new EventHubClientBuilder()
     .credential("<<fully-qualified-namespace>>", "<<event-hub-name>>",
         credential)
     .buildProducerClient();

 // Creating a batch with partitionId set will route all events in that batch to partition `0`.
 CreateBatchOptions options = new CreateBatchOptions().setPartitionId("0");
 EventDataBatch batch = producer.createBatch(options);

 // Add events to batch and when you want to send the batch, send it using the producer.
 producer.send(batch);

Exemplo: publicar eventos na mesma partição, agrupados usando chave de partição

O código de exemplo abaixo usa setPartitionKey(String partitionKey) ao criar o EventDataBatch. Todos os eventos adicionados a esse lote serão publicados na mesma partição. Em geral, eventos com o mesmo partitionKey acabam na mesma partição.

List<EventData> events = Arrays.asList(new EventData("sourdough"), new EventData("rye"),
     new EventData("wheat"));

 // Creating a batch with partitionKey set will tell the service to hash the partitionKey and decide which
 // partition to send the events to. Events with the same partitionKey are always routed to the same partition.
 CreateBatchOptions options = new CreateBatchOptions().setPartitionKey("bread");
 EventDataBatch batch = producer.createBatch(options);

 events.forEach(event -> batch.tryAdd(event));
 producer.send(batch);

Exemplo: publicar eventos usando um tamanho limitado EventDataBatch

O código de exemplo abaixo usa setMaximumSizeInBytes(int maximumSizeInBytes) ao criar o EventDataBatch. No exemplo, ele limita o tamanho do lote a 256 bytes. Isso é útil para cenários em que há restrições como taxa de transferência de rede, memória etc.

List<EventData> telemetryEvents = Arrays.asList(firstEvent, secondEvent, thirdEvent);

 // Setting `setMaximumSizeInBytes` when creating a batch, limits the size of that batch.
 // In this case, all the batches created with these options are limited to 256 bytes.
 CreateBatchOptions options = new CreateBatchOptions().setMaximumSizeInBytes(256);

 EventDataBatch currentBatch = producer.createBatch(options);

 // For each telemetry event, we try to add it to the current batch.
 // When the batch is full, send it then create another batch to add more events to.
 for (EventData event : telemetryEvents) {
     if (!currentBatch.tryAdd(event)) {
         producer.send(currentBatch);
         currentBatch = producer.createBatch(options);

         // Add the event we couldn't before.
         if (!currentBatch.tryAdd(event)) {
             throw new IllegalArgumentException("Event is too large for an empty batch.");
         }
     }
 }

Resumo do método

Modificador e tipo Método e descrição
void close()
EventDataBatch createBatch()

Cria um EventDataBatch que pode se ajustar a tantos eventos quanto o transporte permite.

EventDataBatch createBatch(CreateBatchOptions options)

Cria um EventDataBatch configurado com as opções especificadas.

String getEventHubName()

Obtém o nome do Hub de Eventos com o qual esse cliente interage.

EventHubProperties getEventHubProperties()

Recupera informações sobre um Hub de Eventos, incluindo o número de partições presentes e seus identificadores.

String getFullyQualifiedNamespace()

Obtém o namespace dos Hubs de Eventos totalmente qualificado ao qual a conexão está associada.

String getIdentifier()

Obtém o identificador do cliente.

IterableStream<String> getPartitionIds()

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

PartitionProperties getPartitionProperties(String partitionId)

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.

void send(EventDataBatch batch)

Envia o lote para o Hub de Eventos associado.

void send(Iterable<EventData> events)

Envia um conjunto de eventos para o Hub de Eventos associado usando uma abordagem em lote.

void send(Iterable<EventData> events, SendOptions options)

Envia um conjunto de eventos para o Hub de Eventos associado usando uma abordagem em lote.

Métodos herdados de java.lang.Object

Detalhes do método

close

public void close()

createBatch

public EventDataBatch createBatch()

Cria um EventDataBatch que pode se ajustar a tantos eventos quanto o transporte permite.

Returns:

Um novo EventDataBatch que pode se ajustar a tantos eventos quanto o transporte permite.

createBatch

public EventDataBatch createBatch(CreateBatchOptions options)

Cria um EventDataBatch configurado com as opções especificadas.

Parameters:

options - Um conjunto de opções usado para configurar o EventDataBatch.

Returns:

Um novo EventDataBatch que pode se ajustar a tantos eventos quanto o transporte permite.

getEventHubName

public String getEventHubName()

Obtém o nome do Hub de Eventos com o qual esse cliente interage.

Returns:

O nome do Hub de Eventos com o qual esse cliente interage.

getEventHubProperties

public EventHubProperties getEventHubProperties()

Recupera informações sobre um Hub de Eventos, incluindo o número de partições presentes e seus identificadores.

Returns:

O conjunto de informações para o Hub de Eventos ao qual esse cliente está associado.

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

Obtém o namespace dos Hubs de Eventos totalmente qualificado ao qual a conexão está associada. Isso provavelmente é semelhante a {yournamespace}.servicebus.windows.net.

Returns:

O namespace dos Hubs de Eventos totalmente qualificado ao qual a conexão está associada.

getIdentifier

public String getIdentifier()

Obtém o identificador do cliente.

Returns:

A cadeia de caracteres de identificador exclusiva para o cliente atual.

getPartitionIds

public IterableStream getPartitionIds()

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

Returns:

Um Fluxo de identificadores para as partições de um Hub de Eventos.

getPartitionProperties

public PartitionProperties getPartitionProperties(String partitionId)

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.

Parameters:

partitionId - O identificador exclusivo de uma partição associada ao Hub de Eventos.

Returns:

O conjunto de informações para a partição solicitada no Hub de Eventos ao qual esse cliente está associado.

send

public void send(EventDataBatch batch)

Envia o lote para o Hub de Eventos associado.

Parameters:

batch - O lote a ser enviado para o serviço.

send

public void send(Iterable events)

Envia um conjunto de eventos para o Hub de Eventos associado usando uma abordagem em lote. Se o tamanho dos eventos exceder o tamanho máximo de um único lote, uma exceção será disparada e o envio falhará. Por padrão, o tamanho da mensagem é o valor máximo permitido no link.

List<EventData> events = Arrays.asList(new EventData("maple"), new EventData("aspen"),
     new EventData("oak"));
 producer.send(events);

Para obter mais informações sobre o tamanho máximo do evento permitido, consulte Hubs de Eventos do Azure Cotas e Limites.

Parameters:

events - Eventos a serem enviados para o serviço.

send

public void send(Iterable events, SendOptions options)

Envia um conjunto de eventos para o Hub de Eventos associado usando uma abordagem em lote. Se o tamanho dos eventos exceder o tamanho máximo de um único lote, uma exceção será disparada e o envio falhará. Por padrão, o tamanho da mensagem é o valor máximo permitido no link.

TokenCredential credential = new DefaultAzureCredentialBuilder().build();

 EventHubProducerClient producer = new EventHubClientBuilder()
     .credential("<<fully-qualified-namespace>>", "<<event-hub-name>>",
         credential)
     .buildProducerClient();

 List<EventData> events = Arrays.asList(new EventData("Melbourne"), new EventData("London"),
     new EventData("New York"));

 SendOptions sendOptions = new SendOptions().setPartitionKey("cities");
 producer.send(events, sendOptions);

Para obter mais informações sobre o tamanho máximo do evento permitido, consulte Hubs de Eventos do Azure Cotas e Limites.

Parameters:

events - Eventos a serem enviados para o serviço.
options - O conjunto de opções a serem consideradas ao enviar este lote.

Aplica-se a