Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub/sub patterns, or integrating with Azure services via events.
Add this skill
npx mdskills install sickn33/azure-eventgrid-javaComprehensive SDK reference with clear examples, but lacks agent triggers and step-by-step flow
1---2name: azure-eventgrid-java3description: Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub/sub patterns, or integrating with Azure services via events.4package: com.azure:azure-messaging-eventgrid5---67# Azure Event Grid SDK for Java89Build event-driven applications using the Azure Event Grid SDK for Java.1011## Installation1213```xml14<dependency>15 <groupId>com.azure</groupId>16 <artifactId>azure-messaging-eventgrid</artifactId>17 <version>4.27.0</version>18</dependency>19```2021## Client Creation2223### EventGridPublisherClient2425```java26import com.azure.messaging.eventgrid.EventGridPublisherClient;27import com.azure.messaging.eventgrid.EventGridPublisherClientBuilder;28import com.azure.core.credential.AzureKeyCredential;2930// With API Key31EventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder()32 .endpoint("<topic-endpoint>")33 .credential(new AzureKeyCredential("<access-key>"))34 .buildEventGridEventPublisherClient();3536// For CloudEvents37EventGridPublisherClient<CloudEvent> cloudClient = new EventGridPublisherClientBuilder()38 .endpoint("<topic-endpoint>")39 .credential(new AzureKeyCredential("<access-key>"))40 .buildCloudEventPublisherClient();41```4243### With DefaultAzureCredential4445```java46import com.azure.identity.DefaultAzureCredentialBuilder;4748EventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder()49 .endpoint("<topic-endpoint>")50 .credential(new DefaultAzureCredentialBuilder().build())51 .buildEventGridEventPublisherClient();52```5354### Async Client5556```java57import com.azure.messaging.eventgrid.EventGridPublisherAsyncClient;5859EventGridPublisherAsyncClient<EventGridEvent> asyncClient = new EventGridPublisherClientBuilder()60 .endpoint("<topic-endpoint>")61 .credential(new AzureKeyCredential("<access-key>"))62 .buildEventGridEventPublisherAsyncClient();63```6465## Event Types6667| Type | Description |68|------|-------------|69| `EventGridEvent` | Azure Event Grid native schema |70| `CloudEvent` | CNCF CloudEvents 1.0 specification |71| `BinaryData` | Custom schema events |7273## Core Patterns7475### Publish EventGridEvent7677```java78import com.azure.messaging.eventgrid.EventGridEvent;79import com.azure.core.util.BinaryData;8081EventGridEvent event = new EventGridEvent(82 "resource/path", // subject83 "MyApp.Events.OrderCreated", // eventType84 BinaryData.fromObject(new OrderData("order-123", 99.99)), // data85 "1.0" // dataVersion86);8788client.sendEvent(event);89```9091### Publish Multiple Events9293```java94List<EventGridEvent> events = Arrays.asList(95 new EventGridEvent("orders/1", "Order.Created",96 BinaryData.fromObject(order1), "1.0"),97 new EventGridEvent("orders/2", "Order.Created",98 BinaryData.fromObject(order2), "1.0")99);100101client.sendEvents(events);102```103104### Publish CloudEvent105106```java107import com.azure.core.models.CloudEvent;108import com.azure.core.models.CloudEventDataFormat;109110CloudEvent cloudEvent = new CloudEvent(111 "/myapp/orders", // source112 "order.created", // type113 BinaryData.fromObject(orderData), // data114 CloudEventDataFormat.JSON // dataFormat115);116cloudEvent.setSubject("orders/12345");117cloudEvent.setId(UUID.randomUUID().toString());118119cloudClient.sendEvent(cloudEvent);120```121122### Publish CloudEvents Batch123124```java125List<CloudEvent> cloudEvents = Arrays.asList(126 new CloudEvent("/app", "event.type1", BinaryData.fromString("data1"), CloudEventDataFormat.JSON),127 new CloudEvent("/app", "event.type2", BinaryData.fromString("data2"), CloudEventDataFormat.JSON)128);129130cloudClient.sendEvents(cloudEvents);131```132133### Async Publishing134135```java136asyncClient.sendEvent(event)137 .subscribe(138 unused -> System.out.println("Event sent successfully"),139 error -> System.err.println("Error: " + error.getMessage())140 );141142// With multiple events143asyncClient.sendEvents(events)144 .doOnSuccess(unused -> System.out.println("All events sent"))145 .doOnError(error -> System.err.println("Failed: " + error))146 .block(); // Block if needed147```148149### Custom Event Data Class150151```java152public class OrderData {153 private String orderId;154 private double amount;155 private String customerId;156157 public OrderData(String orderId, double amount) {158 this.orderId = orderId;159 this.amount = amount;160 }161162 // Getters and setters163}164165// Usage166OrderData order = new OrderData("ORD-123", 150.00);167EventGridEvent event = new EventGridEvent(168 "orders/" + order.getOrderId(),169 "MyApp.Order.Created",170 BinaryData.fromObject(order),171 "1.0"172);173```174175## Receiving Events176177### Parse EventGridEvent178179```java180import com.azure.messaging.eventgrid.EventGridEvent;181182// From JSON string (e.g., webhook payload)183String jsonPayload = "[{\"id\": \"...\", ...}]";184List<EventGridEvent> events = EventGridEvent.fromString(jsonPayload);185186for (EventGridEvent event : events) {187 System.out.println("Event Type: " + event.getEventType());188 System.out.println("Subject: " + event.getSubject());189 System.out.println("Event Time: " + event.getEventTime());190191 // Get data192 BinaryData data = event.getData();193 OrderData orderData = data.toObject(OrderData.class);194}195```196197### Parse CloudEvent198199```java200import com.azure.core.models.CloudEvent;201202String cloudEventJson = "[{\"specversion\": \"1.0\", ...}]";203List<CloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJson);204205for (CloudEvent event : cloudEvents) {206 System.out.println("Type: " + event.getType());207 System.out.println("Source: " + event.getSource());208 System.out.println("ID: " + event.getId());209210 MyEventData data = event.getData().toObject(MyEventData.class);211}212```213214### Handle System Events215216```java217import com.azure.messaging.eventgrid.systemevents.*;218219for (EventGridEvent event : events) {220 if (event.getEventType().equals("Microsoft.Storage.BlobCreated")) {221 StorageBlobCreatedEventData blobData =222 event.getData().toObject(StorageBlobCreatedEventData.class);223 System.out.println("Blob URL: " + blobData.getUrl());224 }225}226```227228## Event Grid Namespaces (MQTT/Pull)229230### Receive from Namespace Topic231232```java233import com.azure.messaging.eventgrid.namespaces.EventGridReceiverClient;234import com.azure.messaging.eventgrid.namespaces.EventGridReceiverClientBuilder;235import com.azure.messaging.eventgrid.namespaces.models.*;236237EventGridReceiverClient receiverClient = new EventGridReceiverClientBuilder()238 .endpoint("<namespace-endpoint>")239 .credential(new AzureKeyCredential("<key>"))240 .topicName("my-topic")241 .subscriptionName("my-subscription")242 .buildClient();243244// Receive events245ReceiveResult result = receiverClient.receive(10, Duration.ofSeconds(30));246247for (ReceiveDetails detail : result.getValue()) {248 CloudEvent event = detail.getEvent();249 System.out.println("Event: " + event.getType());250251 // Acknowledge the event252 receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken()));253}254```255256### Reject or Release Events257258```java259// Reject (don't retry)260receiverClient.reject(Arrays.asList(lockToken));261262// Release (retry later)263receiverClient.release(Arrays.asList(lockToken));264265// Release with delay266receiverClient.release(Arrays.asList(lockToken),267 new ReleaseOptions().setDelay(ReleaseDelay.BY_60_SECONDS));268```269270## Error Handling271272```java273import com.azure.core.exception.HttpResponseException;274275try {276 client.sendEvent(event);277} catch (HttpResponseException e) {278 System.out.println("Status: " + e.getResponse().getStatusCode());279 System.out.println("Error: " + e.getMessage());280}281```282283## Environment Variables284285```bash286EVENT_GRID_TOPIC_ENDPOINT=https://<topic-name>.<region>.eventgrid.azure.net/api/events287EVENT_GRID_ACCESS_KEY=<your-access-key>288```289290## Best Practices2912921. **Batch Events**: Send multiple events in one call when possible2932. **Idempotency**: Include unique event IDs for deduplication2943. **Schema Validation**: Use strongly-typed event data classes2954. **Retry Logic**: Built-in, but consider dead-letter for failures2965. **Event Size**: Keep events under 1MB (64KB for basic tier)297298## Trigger Phrases299300- "Event Grid Java"301- "publish events Azure"302- "CloudEvent SDK"303- "event-driven messaging"304- "pub/sub Azure"305- "webhook events"306
Full transparency — inspect the skill content before installing.