Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/azure-eventgrid-java/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-21 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
Build event-driven applications using the Azure Event Grid SDK for Java.
xml<dependency> <groupId>com.azure</groupId> <artifactId>azure-messaging-eventgrid</artifactId> <version>4.27.0</version> </dependency>
javaimport com.azure.messaging.eventgrid.EventGridPublisherClient; import com.azure.messaging.eventgrid.EventGridPublisherClientBuilder; import com.azure.core.credential.AzureKeyCredential; // With API Key EventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder() .endpoint("<topic-endpoint>") .credential(new AzureKeyCredential("<access-key>")) .buildEventGridEventPublisherClient(); // For CloudEvents EventGridPublisherClient<CloudEvent> cloudClient = new EventGridPublisherClientBuilder() .endpoint("<topic-endpoint>") .credential(new AzureKeyCredential("<access-key>")) .buildCloudEventPublisherClient();
javaimport com.azure.identity.DefaultAzureCredentialBuilder; EventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder() .endpoint("<topic-endpoint>") .credential(new DefaultAzureCredentialBuilder().build()) .buildEventGridEventPublisherClient();
javaimport com.azure.messaging.eventgrid.EventGridPublisherAsyncClient; EventGridPublisherAsyncClient<EventGridEvent> asyncClient = new EventGridPublisherClientBuilder() .endpoint("<topic-endpoint>") .credential(new AzureKeyCredential("<access-key>")) .buildEventGridEventPublisherAsyncClient();
| Type | Description | |------|-------------| | EventGridEvent | Azure Event Grid native schema | | CloudEvent | CNCF CloudEvents 1.0 specification | | BinaryData | Custom schema events |
javaimport com.azure.messaging.eventgrid.EventGridEvent; import com.azure.core.util.BinaryData; EventGridEvent event = new EventGridEvent( "resource/path", // subject "MyApp.Events.OrderCreated", // eventType BinaryData.fromObject(new OrderData("order-123", 99.99)), // data "1.0" // dataVersion ); client.sendEvent(event);
javaList<EventGridEvent> events = Arrays.asList( new EventGridEvent("orders/1", "Order.Created", BinaryData.fromObject(order1), "1.0"), new EventGridEvent("orders/2", "Order.Created", BinaryData.fromObject(order2), "1.0") ); client.sendEvents(events);
javaimport com.azure.core.models.CloudEvent; import com.azure.core.models.CloudEventDataFormat; CloudEvent cloudEvent = new CloudEvent( "/myapp/orders", // source "order.created", // type BinaryData.fromObject(orderData), // data CloudEventDataFormat.JSON // dataFormat ); cloudEvent.setSubject("orders/12345"); cloudEvent.setId(UUID.randomUUID().toString()); cloudClient.sendEvent(cloudEvent);
javaList<CloudEvent> cloudEvents = Arrays.asList( new CloudEvent("/app", "event.type1", BinaryData.fromString("data1"), CloudEventDataFormat.JSON), new CloudEvent("/app", "event.type2", BinaryData.fromString("data2"), CloudEventDataFormat.JSON) ); cloudClient.sendEvents(cloudEvents);
javaasyncClient.sendEvent(event) .subscribe( unused -> System.out.println("Event sent successfully"), error -> System.err.println("Error: " + error.getMessage()) ); // With multiple events asyncClient.sendEvents(events) .doOnSuccess(unused -> System.out.println("All events sent")) .doOnError(error -> System.err.println("Failed: " + error)) .block(); // Block if needed
javapublic class OrderData { private String orderId; private double amount; private String customerId; public OrderData(String orderId, double amount) { this.orderId = orderId; this.amount = amount; } // Getters and setters } // Usage OrderData order = new OrderData("ORD-123", 150.00); EventGridEvent event = new EventGridEvent( "orders/" + order.getOrderId(), "MyApp.Order.Created", BinaryData.fromObject(order), "1.0" );
javaimport com.azure.messaging.eventgrid.EventGridEvent; // From JSON string (e.g., webhook payload) String jsonPayload = "[{\"id\": \"...\", ...}]"; List<EventGridEvent> events = EventGridEvent.fromString(jsonPayload); for (EventGridEvent event : events) { System.out.println("Event Type: " + event.getEventType()); System.out.println("Subject: " + event.getSubject()); System.out.println("Event Time: " + event.getEventTime()); // Get data BinaryData data = event.getData(); OrderData orderData = data.toObject(OrderData.class); }
javaimport com.azure.core.models.CloudEvent; String cloudEventJson = "[{\"specversion\": \"1.0\", ...}]"; List<CloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJson); for (CloudEvent event : cloudEvents) { System.out.println("Type: " + event.getType()); System.out.println("Source: " + event.getSource()); System.out.println("ID: " + event.getId()); MyEventData data = event.getData().toObject(MyEventData.class); }
javaimport com.azure.messaging.eventgrid.systemevents.*; for (EventGridEvent event : events) { if (event.getEventType().equals("Microsoft.Storage.BlobCreated")) { StorageBlobCreatedEventData blobData = event.getData().toObject(StorageBlobCreatedEventData.class); System.out.println("Blob URL: " + blobData.getUrl()); } }
javaimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClient; import com.azure.messaging.eventgrid.namespaces.EventGridReceiverClientBuilder; import com.azure.messaging.eventgrid.namespaces.models.*; EventGridReceiverClient receiverClient = new EventGridReceiverClientBuilder() .endpoint("<namespace-endpoint>") .credential(new AzureKeyCredential("<key>")) .topicName("my-topic") .subscriptionName("my-subscription") .buildClient(); // Receive events ReceiveResult result = receiverClient.receive(10, Duration.ofSeconds(30)); for (ReceiveDetails detail : result.getValue()) { CloudEvent event = detail.getEvent(); System.out.println("Event: " + event.getType()); // Acknowledge the event receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken())); }
java// Reject (don't retry) receiverClient.reject(Arrays.asList(lockToken)); // Release (retry later) receiverClient.release(Arrays.asList(lockToken)); // Release with delay receiverClient.release(Arrays.asList(lockToken), new ReleaseOptions().setDelay(ReleaseDelay.BY_60_SECONDS));
javaimport com.azure.core.exception.HttpResponseException; try { client.sendEvent(event); } catch (HttpResponseException e) { System.out.println("Status: " + e.getResponse().getStatusCode()); System.out.println("Error: " + e.getMessage()); }
bashEVENT_GRID_TOPIC_ENDPOINT=https://<topic-name>.<region>.eventgrid.azure.net/api/events EVENT_GRID_ACCESS_KEY=<your-access-key>
This skill is applicable to execute the workflow or actions described in the overview.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.