Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart leert u hoe u gebeurtenissen verzendt naar en ontvangt van een Azure Event Hub met behulp van het Java-pakket azure-messaging-eventhubs .
Aanbeveling
Als u met Azure Event Hubs-resources in een Spring-toepassing werkt, raden we u aan Spring Cloud Azure als alternatief te beschouwen. Spring Cloud Azure is een opensource-project dat naadloze Spring-integratie met Azure-services biedt. Zie Spring Cloud Stream met Azure Event Hubs voor meer informatie over Spring Cloud Azure en voor een voorbeeld met Event Hubs.
Vereiste voorwaarden
Als u nog geen ervaring hebt met Azure Event Hubs, raadpleegt u het Event Hubs-overzicht voordat u deze quickstart uitvoert.
Voor het voltooien van deze quickstart hebt u de volgende vereisten nodig:
- Microsoft Azure-abonnement. Als u Azure-services wilt gebruiken, met inbegrip van Azure Event Hubs, hebt u een abonnement nodig. Als u nog geen Azure-account hebt, kunt u zich aanmelden voor een gratis proefversie of uw voordelen als MSDN-abonnee gebruiken wanneer u een account maakt.
- Een Java-ontwikkelomgeving. In deze quickstart wordt Eclipse gebruikt. Java Development Kit (JDK) met versie 8 of hoger is vereist.
- Een Event Hubs-naamruimte en een Event Hub maken. De eerste stap is het gebruik van Azure Portal om een naamruimte van het type Event Hubs te maken en de beheerreferenties te verkrijgen die uw toepassing nodig heeft om te communiceren met de Event Hub. Volg de procedure in dit artikel om een naamruimte en een Event Hub te maken. Haal vervolgens de verbindingsreeks voor de Event Hubs-naamruimte op door de instructies in het artikel te volgen: Verbindingsreeks ophalen. Je gebruikt de verbindingsreeks later in deze quickstart.
Gebeurtenissen verzenden
In deze sectie wordt beschreven hoe u een Java-toepassing maakt om gebeurtenissen te verzenden naar een Event Hub.
Verwijzing toevoegen naar Azure Event Hubs-bibliotheek
Maak eerst een nieuw Maven-project voor een console/shell-toepassing in uw favoriete Java-ontwikkelomgeving. Werk het pom.xml bestand als volgt bij. De Java-clientbibliotheek voor Event Hubs is beschikbaar in de Centrale Opslagplaats van Maven.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
Opmerking
Werk de versie bij naar de nieuwste versie die is gepubliceerd naar de Maven-opslagplaats.
De app verifiëren bij Azure
In deze quickstart ziet u twee manieren om verbinding te maken met Azure Event Hubs:
- Wachtwoordloos. Gebruik uw beveiligingsprincipaal in Microsoft Entra ID en op rollen gebaseerd toegangsbeheer (RBAC) om verbinding te maken met een Event Hubs-naamruimte. U hoeft zich geen zorgen te maken over het gebruik van vastgelegde verbindingsreeksen in uw code, in een configuratiebestand of in beveiligde opslag, zoals Azure Key Vault.
- Verbindingsreeks. Gebruik een verbindingsreeks om verbinding te maken met een Event Hubs-naamruimte. Als u nog niet eerder met Azure werkt, kunt u de verbindingsreeks optie gemakkelijker volgen.
We raden u aan de optie zonder wachtwoord te gebruiken in echte toepassingen en productieomgevingen. Zie Service Bus-verificatie en -autorisatie enverbindingen zonder wachtwoord voor Azure-services voor meer informatie.
Rollen toewijzen aan uw Microsoft Entra-gebruiker
Wanneer u lokaal ontwikkelt, moet u ervoor zorgen dat het gebruikersaccount dat verbinding maakt met Azure Event Hubs over de juiste machtigingen beschikt. U hebt de rol Azure Event Hubs-gegevenseigenaar nodig om berichten te verzenden en te ontvangen. Als u uzelf deze rol wilt toewijzen, hebt u de rol Gebruikerstoegangsbeheerder of een andere rol nodig die de Microsoft.Authorization/roleAssignments/write actie bevat. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Zie de pagina Scope voor Azure RBAC begrijpen voor meer informatie.
In het volgende voorbeeld wordt de Azure Event Hubs Data Owner rol toegewezen aan uw gebruikersaccount, dat volledige toegang biedt tot Azure Event Hubs-resources. Volg in een echt scenario het principe van minimale bevoegdheden om gebruikers alleen de minimale machtigingen te geven die nodig zijn voor een veiligere productieomgeving.
Ingebouwde Azure-rollen voor Azure Event Hubs
Voor Azure Event Hubs is het beheer van naamruimten en alle gerelateerde resources via Azure Portal en de Azure Resource Management-API al beveiligd met behulp van het Azure RBAC-model. Azure biedt de volgende ingebouwde rollen voor het autoriseren van toegang tot een Event Hubs-naamruimte:
- Azure Event Hubs-gegevenseigenaar: hiermee kunt u gegevenstoegang tot de Event Hubs-naamruimte en de bijbehorende entiteiten (wachtrijen, onderwerpen, abonnementen en filters) inschakelen.
- Azure Event Hubs-gegevenszender: gebruik deze rol om de afzender toegang te geven tot de Event Hubs-naamruimte en de bijbehorende entiteiten.
- Azure Event Hubs-gegevensontvanger: gebruik deze rol om de ontvanger toegang te geven tot de Event Hubs-naamruimte en de bijbehorende entiteiten.
Als u een aangepaste rol wilt maken, raadpleegt u Rechten die vereist zijn voor Event Hubs-bewerkingen.
Belangrijk
In de meeste gevallen duurt het een paar minuten voordat de roltoewijzing in Azure is doorgegeven. In zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Zoek in Azure Portal uw Event Hubs-naamruimte met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de overzichtspagina toegangsbeheer (IAM) in het linkermenu.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu. Selecteer vervolgens Roltoewijzing toevoegen.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. Zoek in dit voorbeeld naar
Azure Event Hubs Data Owneren selecteer het overeenkomende resultaat. Kies Volgende vervolgens.Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal. Kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar de gebruikersnaam van Microsoft Entra (meestal uw user@domain e-mailadres). Kies Selecteren onder aan het dialoogvenster.
Selecteer Controleren en toewijzen om naar de laatste pagina te gaan. Selecteer Beoordelen en opnieuw toewijzen om het proces te voltooien.
Code schrijven om berichten naar de Event Hub te verzenden
Voeg een klasse met de naam Sendertoe en voeg de volgende code toe aan de klasse:
Belangrijk
- Werk
<NAMESPACE NAME>bij met de naam van uw Event Hubs-naamruimte. - Werk
<EVENT HUB NAME>bij met de naam van uw Event Hub.
package ehubquickstart;
import com.azure.messaging.eventhubs.*;
import java.util.Arrays;
import java.util.List;
import com.azure.identity.*;
public class SenderAAD {
// replace <NAMESPACE NAME> with the name of your Event Hubs namespace.
// Example: private static final String namespaceName = "contosons.servicebus.windows.net";
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net";
// Replace <EVENT HUB NAME> with the name of your event hub.
// Example: private static final String eventHubName = "ordersehub";
private static final String eventHubName = "<EVENT HUB NAME>";
public static void main(String[] args) {
publishEvents();
}
/**
* Code sample for publishing events.
* @throws IllegalArgumentException if the EventData is bigger than the max batch size.
*/
public static void publishEvents() {
// create a token using the default Azure credential
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
.build();
// create a producer client
EventHubProducerClient producer = new EventHubClientBuilder()
.fullyQualifiedNamespace(namespaceName)
.eventHubName(eventHubName)
.credential(credential)
.buildProducerClient();
// sample events in an array
List<EventData> allEvents = Arrays.asList(new EventData("Foo"), new EventData("Bar"));
// create a batch
EventDataBatch eventDataBatch = producer.createBatch();
for (EventData eventData : allEvents) {
// try to add the event from the array to the batch
if (!eventDataBatch.tryAdd(eventData)) {
// if the batch is full, send it and then create a new batch
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);
}
producer.close();
}
}
Bouw het programma en zorg ervoor dat er geen fouten zijn. U voert dit programma uit nadat u het ontvangerprogramma hebt uitgevoerd.
Gebeurtenissen ontvangen
De code in deze zelfstudie is gebaseerd op het EventProcessorClient-voorbeeld op GitHub, dat u kunt onderzoeken om de volledige werkende toepassing te bekijken.
Volg deze aanbevelingen wanneer u Azure Blob Storage als controlepuntarchief gebruikt:
- Gebruik een afzonderlijke container voor elke consumentengroep. U kunt hetzelfde opslagaccount gebruiken, maar één container per groep gebruiken.
- Gebruik het opslagaccount niet voor iets anders.
- Gebruik de container niet voor iets anders.
- Maak het opslagaccount in dezelfde regio als de geïmplementeerde toepassing. Als de toepassing on-premises is, probeert u de dichtstbijzijnde regio te kiezen.
Controleer op de pagina Opslagaccount in Azure Portal in de sectie Blob-service of de volgende instellingen zijn uitgeschakeld.
- Hiërarchische naamruimte
- Blob zacht verwijderen
- Versiebeheer
Een Azure Storage en een blobcontainer maken
In deze snelstart gebruikt u Azure Storage (met name Blob Storage) als controleopslag. Controlepunten zijn een proces waarmee een gebeurtenisprocessor de positie van de laatst verwerkte gebeurtenis binnen een partitie markeert of doorvoert. Het markeren van een controlepunt wordt meestal uitgevoerd binnen de functie die de gebeurtenissen verwerkt. Zie Gebeurtenisprocessor voor meer informatie over controlepunten.
Volg deze stappen om een Azure Storage-account te maken.
- Een Azure Storage-account maken
- Een blobcontainer maken
- Authenticeren bij de blobcontainer
Wanneer u lokaal ontwikkelt, moet u ervoor zorgen dat het gebruikersaccount dat toegang heeft tot blobgegevens over de juiste machtigingen beschikt. U hebt Inzender voor Opslagblobgegevens nodig om blobgegevens te lezen en schrijven. Als u uzelf deze rol wilt toewijzen, moet u de rol Beheerder voor gebruikerstoegang of een andere rol met de actie Microsoft.Authorization/roleAssignments/write krijgen toegewezen. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Zie Inzicht in het bereik voor Azure RBAC voor meer informatie.
In dit scenario wijst u machtigingen toe aan uw gebruikersaccount, dat is afgestemd op het opslagaccount, om het principe van minimale bevoegdheden te volgen. Deze procedure biedt gebruikers alleen de minimale machtigingen die nodig zijn en maakt veiligere productieomgevingen.
In het volgende voorbeeld wordt de rol Inzender voor opslagblobgegevens toegewezen aan uw gebruikersaccount, dat zowel lees- als schrijftoegang biedt tot blobgegevens in uw opslagaccount.
Belangrijk
In de meeste gevallen duurt het een paar minuten voordat de roltoewijzing in Azure is doorgegeven. In zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Zoek uw opslagaccount in Azure Portal met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de pagina opslagaccount toegangsbeheer (IAM) in het menu aan de linkerkant.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu. Selecteer vervolgens Roltoewijzing toevoegen.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. Zoek voor dit voorbeeld naar Inzender voor Opslagblobgegevens. Selecteer het overeenkomende resultaat en kies vervolgens Volgende.
Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Controleren en toewijzen om naar de laatste pagina te gaan. Selecteer Beoordelen en opnieuw toewijzen om het proces te voltooien.
Event Hubs-bibliotheken toevoegen aan uw Java-project
Voeg de volgende afhankelijkheden toe in het bestand pom.xml.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.20.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
<version>1.20.6</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.16.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
Voeg de volgende
importinstructies toe boven aan het Java-bestand.import com.azure.messaging.eventhubs.*; import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore; import com.azure.messaging.eventhubs.models.*; import com.azure.storage.blob.*; import java.util.function.Consumer; import com.azure.identity.*;Maak een klasse met de naam
Receiveren voeg de volgende tekenreeksvariabelen toe aan de klasse. Vervang de tijdelijke aanduidingen door de juiste waarden.Belangrijk
Vervang de tijdelijke aanduidingen door de juiste waarden.
-
<NAMESPACE NAME>met de naam van uw Event Hubs-naamruimte. -
<EVENT HUB NAME>met de naam van uw Event Hub in de naamruimte.
private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net"; private static final String eventHubName = "<EVENT HUB NAME>";-
Voeg de volgende
mainmethode toe aan de klasse.Belangrijk
Vervang de tijdelijke aanduidingen door de juiste waarden.
-
<STORAGE ACCOUNT NAME>met de naam van uw Azure Storage-account. -
<CONTAINER NAME>met de naam van de blob-container in het opslagaccount
// create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD) .build(); // Create a blob container client that you use later to build an event processor client to receive and process events BlobContainerAsyncClient blobContainerAsyncClient = new BlobContainerClientBuilder() .credential(credential) .endpoint("https://<STORAGE ACCOUNT NAME>.blob.core.windows.net") .containerName("<CONTAINER NAME>") .buildAsyncClient(); // Create an event processor client to receive and process events and errors. EventProcessorClient eventProcessorClient = new EventProcessorClientBuilder() .fullyQualifiedNamespace(namespaceName) .eventHubName(eventHubName) .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME) .processEvent(PARTITION_PROCESSOR) .processError(ERROR_HANDLER) .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient)) .credential(credential) .buildEventProcessorClient(); System.out.println("Starting event processor"); eventProcessorClient.start(); System.out.println("Press enter to stop."); System.in.read(); System.out.println("Stopping event processor"); eventProcessorClient.stop(); System.out.println("Event processor stopped."); System.out.println("Exiting process");-
Voeg de twee helpermethoden (
PARTITION_PROCESSORenERROR_HANDLER) toe die gebeurtenissen en fouten verwerken aan deReceiverklasse.public static final Consumer<EventContext> PARTITION_PROCESSOR = eventContext -> { PartitionContext partitionContext = eventContext.getPartitionContext(); EventData eventData = eventContext.getEventData(); System.out.printf("Processing event from partition %s with sequence number %d with body: %s%n", partitionContext.getPartitionId(), eventData.getSequenceNumber(), eventData.getBodyAsString()); // Every 10 events received, it will update the checkpoint stored in Azure Blob Storage. if (eventData.getSequenceNumber() % 10 == 0) { eventContext.updateCheckpoint(); } }; public static final Consumer<ErrorContext> ERROR_HANDLER = errorContext -> { System.out.printf("Error occurred in partition processor for partition %s, %s.%n", errorContext.getPartitionContext().getPartitionId(), errorContext.getThrowable()); };Bouw het programma en zorg ervoor dat er geen fouten zijn.
De toepassingen uitvoeren
Voer eerst de ontvangertoepassing uit.
Voer vervolgens de toepassing Afzender uit.
Controleer in het venster Ontvangertoepassing of u de gebeurtenissen ziet die zijn gepubliceerd door de toepassing Afzender.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: BarDruk op Enter in het venster van de ontvangertoepassing om de toepassing te stoppen.
Starting event processor Press enter to stop. Processing event from partition 0 with sequence number 331 with body: Foo Processing event from partition 0 with sequence number 332 with body: Bar Stopping event processor Event processor stopped. Exiting process
Verwante inhoud
Bekijk de volgende voorbeelden op GitHub: