Partager via


EventHubProducerClient Classe

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

Implémente

public class EventHubProducerClient
implements Closeable

Producteur synchrone chargé de transmettre EventData à un Event Hub spécifique, regroupé en lots. Selon le spécifié lors de la CreateBatchOptions création d’un EventDataBatch, les événements peuvent être automatiquement routés vers une partition disponible ou spécifiques à une partition. Informations supplémentaires et recommandations spécifiques pour les stratégies à utiliser lors de la publication d’événements se trouve dans : Distribuer des événements sur des partitions

Il est recommandé d’autoriser le routage automatique des partitions dans les cas suivants :

  • L’envoi d’événements doit être hautement disponible.
  • Les données d’événement doivent être réparties uniformément entre toutes les partitions disponibles.

Si aucun ID de partition n’est spécifié, les règles suivantes sont utilisées pour en sélectionner automatiquement un :

  1. Répartissez les événements de manière égale entre toutes les partitions disponibles à l’aide d’une approche de tourniquet (round robin).
  2. Si une partition devient indisponible, le service Event Hubs la détecte automatiquement et transfère le message vers une autre partition disponible.

Les exemples présentés dans ce document utilisent un objet d’informations d’identification nommé DefaultAzureCredential pour l’authentification, ce qui est approprié pour la plupart des scénarios, y compris les environnements de développement et de production locaux. En outre, nous vous recommandons d’utiliser l’identité managée pour l’authentification dans les environnements de production. Vous trouverez plus d’informations sur les différentes méthodes d’authentification et leurs types d’informations d’identification correspondants dans la documentation Azure Identity .

Exemple : Construire un EventHubProducerClient

L’exemple de code suivant illustre la création du client EventHubProducerClientsynchrone . fullyQualifiedNamespace est le nom d’hôte de l’espace de noms Event Hubs. Il est répertorié sous le volet « Essentials » après avoir accédé à l’espace de noms Event Hubs via le portail 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();

Exemple : Créer un producteur et publier des événements sur n’importe quelle partition

L’exemple de code suivant illustre la publication d’événements et la possibilité pour le service de distribuer les événements en tourniquet (round robin) entre toutes les partitions.

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();

Exemple : Publier des événements sur la partition « 0 »

L’exemple de code suivant illustre la publication d’événements dans une partition spécifique. Dans le scénario ci-dessous, tous les événements sont envoyés à la partition « 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);

Exemple : Publier des événements sur la même partition, regroupés à l’aide de la clé de partition

L’exemple de code ci-dessous est utilisé setPartitionKey(String partitionKey) lors de la création de .EventDataBatch Tous les événements ajoutés à ce lot seront publiés sur la même partition. En général, les événements avec la même partitionKey partition se terminent dans la même partition.

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);

Exemple : Publier des événements à l’aide d’une taille limitée EventDataBatch

L’exemple de code ci-dessous est utilisé setMaximumSizeInBytes(int maximumSizeInBytes) lors de la création de .EventDataBatch Dans l’exemple, il limite la taille du lot à 256 octets. Cela est utile pour les scénarios où il existe des contraintes telles que le débit réseau, la mémoire, 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.");
         }
     }
 }

Résumé de la méthode

Modificateur et type Méthode et description
void close()
EventDataBatch createBatch()

Crée un qui peut s’adapter EventDataBatch à autant d’événements que le transport le permet.

EventDataBatch createBatch(CreateBatchOptions options)

Crée un EventDataBatch configuré avec les options spécifiées.

String getEventHubName()

Obtient le nom d’Event Hub avec lequel ce client interagit.

EventHubProperties getEventHubProperties()

Récupère des informations sur un hub d’événements, notamment le nombre de partitions présentes et leurs identificateurs.

String getFullyQualifiedNamespace()

Obtient l’espace de noms Event Hubs complet auquel la connexion est associée.

String getIdentifier()

Obtient l’identificateur du client.

IterableStream<String> getPartitionIds()

Récupère les identificateurs des partitions d’un Event Hub.

PartitionProperties getPartitionProperties(String partitionId)

Récupère des informations sur une partition spécifique pour un Event Hub, y compris des éléments qui décrivent les événements disponibles dans le flux d’événements de partition.

void send(EventDataBatch batch)

Envoie le lot au hub d’événements associé.

void send(Iterable<EventData> events)

Envoie un ensemble d’événements au hub d’événements associé à l’aide d’une approche par lots.

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

Envoie un ensemble d’événements au hub d’événements associé à l’aide d’une approche par lots.

Méthodes héritées de java.lang.Object

Détails de la méthode

close

public void close()

createBatch

public EventDataBatch createBatch()

Crée un qui peut s’adapter EventDataBatch à autant d’événements que le transport le permet.

Returns:

Nouveau EventDataBatch qui peut s’adapter à autant d’événements que le transport le permet.

createBatch

public EventDataBatch createBatch(CreateBatchOptions options)

Crée un EventDataBatch configuré avec les options spécifiées.

Parameters:

options - Ensemble d’options utilisées pour configurer .EventDataBatch

Returns:

Nouveau EventDataBatch qui peut s’adapter à autant d’événements que le transport le permet.

getEventHubName

public String getEventHubName()

Obtient le nom d’Event Hub avec lequel ce client interagit.

Returns:

Nom event Hub avec lequel ce client interagit.

getEventHubProperties

public EventHubProperties getEventHubProperties()

Récupère des informations sur un hub d’événements, notamment le nombre de partitions présentes et leurs identificateurs.

Returns:

Ensemble d’informations pour le hub d’événements auquel ce client est associé.

getFullyQualifiedNamespace

public String getFullyQualifiedNamespace()

Obtient l’espace de noms Event Hubs complet auquel la connexion est associée. Cela est probablement similaire à {yournamespace}.servicebus.windows.net.

Returns:

Espace de noms Event Hubs complet auquel la connexion est associée.

getIdentifier

public String getIdentifier()

Obtient l’identificateur du client.

Returns:

Chaîne d’identificateur unique pour le client actuel.

getPartitionIds

public IterableStream getPartitionIds()

Récupère les identificateurs des partitions d’un Event Hub.

Returns:

Flux d’identificateurs pour les partitions d’un Event Hub.

getPartitionProperties

public PartitionProperties getPartitionProperties(String partitionId)

Récupère des informations sur une partition spécifique pour un Event Hub, y compris des éléments qui décrivent les événements disponibles dans le flux d’événements de partition.

Parameters:

partitionId - Identificateur unique d’une partition associée à Event Hub.

Returns:

Ensemble d’informations pour la partition demandée sous le hub d’événements à laquelle ce client est associé.

send

public void send(EventDataBatch batch)

Envoie le lot au hub d’événements associé.

Parameters:

batch - Lot à envoyer au service.

send

public void send(Iterable events)

Envoie un ensemble d’événements au hub d’événements associé à l’aide d’une approche par lots. Si la taille des événements dépasse la taille maximale d’un lot unique, une exception est déclenchée et l’envoi échoue. Par défaut, la taille du message correspond à la quantité maximale autorisée sur le lien.

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

Pour plus d’informations sur la taille maximale d’événement autorisée, consultez Azure Event Hubs quotas et limites.

Parameters:

events - Événements à envoyer au service.

send

public void send(Iterable events, SendOptions options)

Envoie un ensemble d’événements au hub d’événements associé à l’aide d’une approche par lots. Si la taille des événements dépasse la taille maximale d’un lot unique, une exception est déclenchée et l’envoi échoue. Par défaut, la taille du message correspond à la quantité maximale autorisée sur le lien.

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);

Pour plus d’informations sur la taille maximale d’événement autorisée, consultez Azure Event Hubs quotas et limites.

Parameters:

events - Événements à envoyer au service.
options - Ensemble d’options à prendre en compte lors de l’envoi de ce lot.

S’applique à