EventHubProducerClient Classe
- java.
lang. Object - com.
azure. messaging. eventhubs. EventHubProducerClient
- com.
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 :
- Répartissez les événements de manière égale entre toutes les partitions disponibles à l’aide d’une approche de tourniquet (round robin).
- 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() |
Event |
createBatch()
Crée un qui peut s’adapter EventDataBatch à autant d’événements que le transport le permet. |
Event |
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. |
Event |
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. |
Iterable |
getPartitionIds()
Récupère les identificateurs des partitions d’un Event Hub. |
Partition |
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:
createBatch
public EventDataBatch createBatch(CreateBatchOptions options)
Crée un EventDataBatch configuré avec les options spécifiées.
Parameters:
Returns:
getEventHubName
public String getEventHubName()
Obtient le nom d’Event Hub avec lequel ce client interagit.
Returns:
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:
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:
getIdentifier
public String getIdentifier()
Obtient l’identificateur du client.
Returns:
getPartitionIds
public IterableStream
Récupère les identificateurs des partitions d’un Event Hub.
Returns:
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:
Returns:
send
public void send(EventDataBatch batch)
Envoie le lot au hub d’événements associé.
Parameters:
send
public void send(Iterable
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:
send
public void send(Iterable
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:
S’applique à
Azure SDK for Java