Események fogadása lekéréses kézbesítéssel a Javával
Ez a cikk gyors, részletes útmutatót nyújt a CloudEvents fogadásához az Event Grid lekéréses kézbesítésével. Mintakódot biztosít a fogadáshoz, nyugtázáshoz (események törléséhez az Event Gridből).
Előfeltételek
A folytatáshoz szükséges előfeltételek a következők:
Ismerje meg, mi az a lekéréses kézbesítés. További információkért tekintse meg a lekéréses kézbesítés alapelveit és a lekéréses kézbesítés áttekintését.
Névtér, témakör és esemény-előfizetés.
- Névtér létrehozása és kezelése
- Névtér témakör létrehozása és kezelése
- Esemény-előfizetés létrehozása és kezelése
A legújabb béta SDK-csomag. Ha maven-t használ, megtekintheti a Maven központi adattárát.
Fontos
A lekéréses kézbesítési adatsík SDK-támogatása bétacsomagokban érhető el. A projekt legújabb bétacsomagját kell használnia.
Olyan IDE, amely támogatja a Javát, például az IntelliJ IDEA-t, az Eclipse IDE-t vagy a Visual Studio Code-ot.
Java JRE futtató Java 8 nyelvi szint.
Az eseményeknek elérhetőnek kell lennie egy témakörben. Tekintse meg az események névtérrel kapcsolatos témakörökben való közzétételét.
Események fogadása lekéréses kézbesítéssel
Az Eseményrács eseményeit egy névtértéma és egy üzenetsor-esemény-előfizetés megadásával olvashatja el a fogadási művelettel. Az esemény-előfizetés az az erőforrás, amely hatékonyan meghatározza a fogyasztói ügyfél által olvasható CloudEvents-gyűjteményt. Ez a mintakód kulcsalapú hitelesítést használ, mivel gyors és egyszerű megközelítést biztosít a hitelesítéshez. Éles helyzetekben a Microsoft Entry ID hitelesítést kell használnia, mert sokkal robusztusabb hitelesítési mechanizmust biztosít.
package com.azure.messaging.eventgrid.samples;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.HttpClient;
import com.azure.core.models.CloudEvent;
import com.azure.messaging.eventgrid.EventGridClient;
import com.azure.messaging.eventgrid.EventGridClientBuilder;
import com.azure.messaging.eventgrid.EventGridMessagingServiceVersion;
import com.azure.messaging.eventgrid.models.*;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Simple demo consumer app of CloudEvents from queue event subscriptions created for namespace topics.
* This code samples should use Java 1.8 level or above to avoid compilation errors.
* You should consult the resources below to use the client SDK and set up your project using maven.
* @see <a href="https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/eventgrid/azure-messaging-eventgrid">Event Grid data plane client SDK documentation</a>
* @see <a href="https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md">Azure BOM for client libraries</a>
* @see <a href="https://aka.ms/spring/versions">Spring Version Mapping</a> if you are using Spring.
* @see <a href="https://aka.ms/azsdk">Tool with links to control plane and data plane SDKs across all languages supported</a>.
*</p>
*/
public class NamespaceTopicConsumer {
private static final String TOPIC_NAME = "<yourNamespaceTopicName>";
public static final String EVENT_SUBSCRIPTION_NAME = "<yourEventSusbcriptionName>";
public static final String ENDPOINT = "<yourFullHttpsUrlToTheNamespaceEndpoint>";
public static final int MAX_NUMBER_OF_EVENTS_TO_RECEIVE = 10;
public static final Duration MAX_WAIT_TIME_FOR_EVENTS = Duration.ofSeconds(10);
private static EventGridClient eventGridClient;
private static List<String> receivedCloudEventLockTokens = new ArrayList<>();
private static List<CloudEvent> receivedCloudEvents = new ArrayList<>();
//TODO Do NOT include keys in source code. This code's objective is to give you a succinct sample about using Event Grid, not to provide an authoritative example for handling secrets in applications.
/**
* For security concerns, you should not have keys or any other secret in any part of the application code.
* You should use services like Azure Key Vault for managing your keys.
*/
public static final AzureKeyCredential CREDENTIAL = new AzureKeyCredential("<namespace key>");
public static void main(String[] args) {
//TODO Update Event Grid version number to your desired version. You can find more information on data plane APIs here:
//https://learn.microsoft.com/en-us/rest/api/eventgrid/.
eventGridClient = new EventGridClientBuilder()
.httpClient(HttpClient.createDefault()) // Requires Java 1.8 level
.endpoint(ENDPOINT)
.serviceVersion(EventGridMessagingServiceVersion.V2023_06_01_PREVIEW)
.credential(CREDENTIAL).buildClient(); // you may want to use .buildAsyncClient() for an asynchronous (project reactor) client.
System.out.println("Waiting " + MAX_WAIT_TIME_FOR_EVENTS.toSecondsPart() + " seconds for events to be read...");
List<ReceiveDetails> receiveDetails = eventGridClient.receiveCloudEvents(TOPIC_NAME, EVENT_SUBSCRIPTION_NAME,
MAX_NUMBER_OF_EVENTS_TO_RECEIVE, MAX_WAIT_TIME_FOR_EVENTS).getValue();
for (ReceiveDetails detail : receiveDetails) {
// Add order message received to a tracking list
CloudEvent orderCloudEvent = detail.getEvent();
receivedCloudEvents.add(orderCloudEvent);
// Add lock token to a tracking list. Lock token functions like an identifier to a cloudEvent
BrokerProperties metadataForCloudEventReceived = detail.getBrokerProperties();
String lockToken = metadataForCloudEventReceived.getLockToken();
receivedCloudEventLockTokens.add(lockToken);
}
System.out.println("<-- Number of events received: " + receivedCloudEvents.size());
Események nyugtázása
Az események nyugtázásához használja ugyanazt a kódot, amelyet az események fogadásához használ, és adja hozzá a következő sorokat egy nyugtázási privát metódus meghívásához:
// Acknowledge (i.e. delete from Event Grid the) events
acknowledge(receivedCloudEventLockTokens);
A nyugtázási metódus mintája és egy segédprogram, amely a sikertelen zárolási jogkivonatokra vonatkozó információkat nyomtatja ki, az alábbiakat követi:
private static void acknowledge(List<String> lockTokens) {
AcknowledgeResult acknowledgeResult = eventGridClient.acknowledgeCloudEvents(TOPIC_NAME, EVENT_SUBSCRIPTION_NAME, new AcknowledgeOptions(lockTokens));
List<String> succeededLockTokens = acknowledgeResult.getSucceededLockTokens();
if (succeededLockTokens != null && lockTokens.size() >= 1)
System.out.println("@@@ " + succeededLockTokens.size() + " events were successfully acknowledged:");
for (String lockToken : succeededLockTokens) {
System.out.println(" Acknowledged event lock token: " + lockToken);
}
// Print the information about failed lock tokens
if (succeededLockTokens.size() < lockTokens.size()) {
System.out.println(" At least one event was not acknowledged (deleted from Event Grid)");
writeFailedLockTokens(acknowledgeResult.getFailedLockTokens());
}
}
private static void writeFailedLockTokens(List<FailedLockToken> failedLockTokens) {
for (FailedLockToken failedLockToken : failedLockTokens) {
System.out.println(" Failed lock token: " + failedLockToken.getLockToken());
System.out.println(" Error code: " + failedLockToken.getErrorCode());
System.out.println(" Error description: " + failedLockToken.getErrorDescription());
}
}
Kiadási események
Kiadási események, hogy elérhetővé tegyék őket az újrafelfedéshez. Az események nyugtázásához használthoz hasonlóan hozzáadhatja a következő statikus metódust és egy sort, amely meghívja az argumentumként átadott zárolási jogkivonatok által azonosított események kiadásához. A fordításhoz szüksége van a writeFailedLockTokens
metódus metódusára.
private static void release(List<String> lockTokens) {
ReleaseResult releaseResult = eventGridClient.releaseCloudEvents(TOPIC_NAME, EVENT_SUBSCRIPTION_NAME, new ReleaseOptions(lockTokens));
List<String> succeededLockTokens = releaseResult.getSucceededLockTokens();
if (succeededLockTokens != null && lockTokens.size() >= 1)
System.out.println("^^^ " + succeededLockTokens.size() + " events were successfully released:");
for (String lockToken : succeededLockTokens) {
System.out.println(" Released event lock token: " + lockToken);
}
// Print the information about failed lock tokens
if (succeededLockTokens.size() < lockTokens.size()) {
System.out.println(" At least one event was not released back to Event Grid.");
writeFailedLockTokens(releaseResult.getFailedLockTokens());
}
}
Események elvetése
Elutasíthatja azokat az eseményeket, amelyeket a fogyasztói alkalmazás nem tud feldolgozni. Az esemény elutasításának feltételei közé tartozik egy helytelen formátumú esemény, amely nem elemezhető, vagy az eseményeket feldolgozó alkalmazással kapcsolatos problémák.
private static void reject(List<String> lockTokens) {
RejectResult rejectResult = eventGridClient.rejectCloudEvents(TOPIC_NAME, EVENT_SUBSCRIPTION_NAME, new RejectOptions(lockTokens));
List<String> succeededLockTokens = rejectResult.getSucceededLockTokens();
if (succeededLockTokens != null && lockTokens.size() >= 1)
System.out.println("--- " + succeededLockTokens.size() + " events were successfully rejected:");
for (String lockToken : succeededLockTokens) {
System.out.println(" Rejected event lock token: " + lockToken);
}
// Print the information about failed lock tokens
if (succeededLockTokens.size() < lockTokens.size()) {
System.out.println(" At least one event was not rejected.");
writeFailedLockTokens(rejectResult.getFailedLockTokens());
}
}
Következő lépések
- Lásd: Java API-referencia.
- A lekéréses kézbesítési modellről további információt a lekéréses kézbesítés áttekintésében talál.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: