{"id":"a76c633c-6da5-462e-99df-2144b4449a88","shortId":"MuCLF4","kind":"skill","title":"azure-eventgrid-java","tagline":"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.","description":"# Azure Event Grid SDK for Java\n\nBuild event-driven applications using the Azure Event Grid SDK for Java.\n\n## Installation\n\n```xml\n<dependency>\n    <groupId>com.azure</groupId>\n    <artifactId>azure-messaging-eventgrid</artifactId>\n    <version>4.27.0</version>\n</dependency>\n```\n\n## Client Creation\n\n### EventGridPublisherClient\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherClient;\nimport com.azure.messaging.eventgrid.EventGridPublisherClientBuilder;\nimport com.azure.core.credential.AzureKeyCredential;\n\n// With API Key\nEventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"<topic-endpoint>\")\n    .credential(new AzureKeyCredential(\"<access-key>\"))\n    .buildEventGridEventPublisherClient();\n\n// For CloudEvents\nEventGridPublisherClient<CloudEvent> cloudClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"<topic-endpoint>\")\n    .credential(new AzureKeyCredential(\"<access-key>\"))\n    .buildCloudEventPublisherClient();\n```\n\n### With DefaultAzureCredential\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nEventGridPublisherClient<EventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"<topic-endpoint>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildEventGridEventPublisherClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherAsyncClient;\n\nEventGridPublisherAsyncClient<EventGridEvent> asyncClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"<topic-endpoint>\")\n    .credential(new AzureKeyCredential(\"<access-key>\"))\n    .buildEventGridEventPublisherAsyncClient();\n```\n\n## Event Types\n\n| Type | Description |\n|------|-------------|\n| `EventGridEvent` | Azure Event Grid native schema |\n| `CloudEvent` | CNCF CloudEvents 1.0 specification |\n| `BinaryData` | Custom schema events |\n\n## Core Patterns\n\n### Publish EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\nimport com.azure.core.util.BinaryData;\n\nEventGridEvent event = new EventGridEvent(\n    \"resource/path\",           // subject\n    \"MyApp.Events.OrderCreated\", // eventType\n    BinaryData.fromObject(new OrderData(\"order-123\", 99.99)), // data\n    \"1.0\"                      // dataVersion\n);\n\nclient.sendEvent(event);\n```\n\n### Publish Multiple Events\n\n```java\nList<EventGridEvent> events = Arrays.asList(\n    new EventGridEvent(\"orders/1\", \"Order.Created\", \n        BinaryData.fromObject(order1), \"1.0\"),\n    new EventGridEvent(\"orders/2\", \"Order.Created\", \n        BinaryData.fromObject(order2), \"1.0\")\n);\n\nclient.sendEvents(events);\n```\n\n### Publish CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\nimport com.azure.core.models.CloudEventDataFormat;\n\nCloudEvent cloudEvent = new CloudEvent(\n    \"/myapp/orders\",           // source\n    \"order.created\",           // type\n    BinaryData.fromObject(orderData), // data\n    CloudEventDataFormat.JSON  // dataFormat\n);\ncloudEvent.setSubject(\"orders/12345\");\ncloudEvent.setId(UUID.randomUUID().toString());\n\ncloudClient.sendEvent(cloudEvent);\n```\n\n### Publish CloudEvents Batch\n\n```java\nList<CloudEvent> cloudEvents = Arrays.asList(\n    new CloudEvent(\"/app\", \"event.type1\", BinaryData.fromString(\"data1\"), CloudEventDataFormat.JSON),\n    new CloudEvent(\"/app\", \"event.type2\", BinaryData.fromString(\"data2\"), CloudEventDataFormat.JSON)\n);\n\ncloudClient.sendEvents(cloudEvents);\n```\n\n### Async Publishing\n\n```java\nasyncClient.sendEvent(event)\n    .subscribe(\n        unused -> System.out.println(\"Event sent successfully\"),\n        error -> System.err.println(\"Error: \" + error.getMessage())\n    );\n\n// With multiple events\nasyncClient.sendEvents(events)\n    .doOnSuccess(unused -> System.out.println(\"All events sent\"))\n    .doOnError(error -> System.err.println(\"Failed: \" + error))\n    .block(); // Block if needed\n```\n\n### Custom Event Data Class\n\n```java\npublic class OrderData {\n    private String orderId;\n    private double amount;\n    private String customerId;\n    \n    public OrderData(String orderId, double amount) {\n        this.orderId = orderId;\n        this.amount = amount;\n    }\n    \n    // Getters and setters\n}\n\n// Usage\nOrderData order = new OrderData(\"ORD-123\", 150.00);\nEventGridEvent event = new EventGridEvent(\n    \"orders/\" + order.getOrderId(),\n    \"MyApp.Order.Created\",\n    BinaryData.fromObject(order),\n    \"1.0\"\n);\n```\n\n## Receiving Events\n\n### Parse EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\n\n// From JSON string (e.g., webhook payload)\nString jsonPayload = \"[{\\\"id\\\": \\\"...\\\", ...}]\";\nList<EventGridEvent> events = EventGridEvent.fromString(jsonPayload);\n\nfor (EventGridEvent event : events) {\n    System.out.println(\"Event Type: \" + event.getEventType());\n    System.out.println(\"Subject: \" + event.getSubject());\n    System.out.println(\"Event Time: \" + event.getEventTime());\n    \n    // Get data\n    BinaryData data = event.getData();\n    OrderData orderData = data.toObject(OrderData.class);\n}\n```\n\n### Parse CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\n\nString cloudEventJson = \"[{\\\"specversion\\\": \\\"1.0\\\", ...}]\";\nList<CloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJson);\n\nfor (CloudEvent event : cloudEvents) {\n    System.out.println(\"Type: \" + event.getType());\n    System.out.println(\"Source: \" + event.getSource());\n    System.out.println(\"ID: \" + event.getId());\n    \n    MyEventData data = event.getData().toObject(MyEventData.class);\n}\n```\n\n### Handle System Events\n\n```java\nimport com.azure.messaging.eventgrid.systemevents.*;\n\nfor (EventGridEvent event : events) {\n    if (event.getEventType().equals(\"Microsoft.Storage.BlobCreated\")) {\n        StorageBlobCreatedEventData blobData = \n            event.getData().toObject(StorageBlobCreatedEventData.class);\n        System.out.println(\"Blob URL: \" + blobData.getUrl());\n    }\n}\n```\n\n## Event Grid Namespaces (MQTT/Pull)\n\n### Receive from Namespace Topic\n\n```java\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClient;\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClientBuilder;\nimport com.azure.messaging.eventgrid.namespaces.models.*;\n\nEventGridReceiverClient receiverClient = new EventGridReceiverClientBuilder()\n    .endpoint(\"<namespace-endpoint>\")\n    .credential(new AzureKeyCredential(\"<key>\"))\n    .topicName(\"my-topic\")\n    .subscriptionName(\"my-subscription\")\n    .buildClient();\n\n// Receive events\nReceiveResult result = receiverClient.receive(10, Duration.ofSeconds(30));\n\nfor (ReceiveDetails detail : result.getValue()) {\n    CloudEvent event = detail.getEvent();\n    System.out.println(\"Event: \" + event.getType());\n    \n    // Acknowledge the event\n    receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken()));\n}\n```\n\n### Reject or Release Events\n\n```java\n// Reject (don't retry)\nreceiverClient.reject(Arrays.asList(lockToken));\n\n// Release (retry later)\nreceiverClient.release(Arrays.asList(lockToken));\n\n// Release with delay\nreceiverClient.release(Arrays.asList(lockToken), \n    new ReleaseOptions().setDelay(ReleaseDelay.BY_60_SECONDS));\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    client.sendEvent(event);\n} catch (HttpResponseException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n}\n```\n\n## Environment Variables\n\n```bash\nEVENT_GRID_TOPIC_ENDPOINT=https://<topic-name>.<region>.eventgrid.azure.net/api/events\nEVENT_GRID_ACCESS_KEY=<your-access-key>\n```\n\n## Best Practices\n\n1. **Batch Events**: Send multiple events in one call when possible\n2. **Idempotency**: Include unique event IDs for deduplication\n3. **Schema Validation**: Use strongly-typed event data classes\n4. **Retry Logic**: Built-in, but consider dead-letter for failures\n5. **Event Size**: Keep events under 1MB (64KB for basic tier)\n\n## Trigger Phrases\n\n- \"Event Grid Java\"\n- \"publish events Azure\"\n- \"CloudEvent SDK\"\n- \"event-driven messaging\"\n- \"pub/sub Azure\"\n- \"webhook events\"\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","eventgrid","java","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-eventgrid-java","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-eventgrid-java","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (8,501 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:30.248Z","embedding":null,"createdAt":"2026-04-18T21:32:23.210Z","updatedAt":"2026-04-24T18:50:30.248Z","lastSeenAt":"2026-04-24T18:50:30.248Z","tsv":"'-123':160,311 '/api/events':535 '/app':226,233 '/myapp/orders':201 '1':542 '1.0':133,163,180,187,322,375 '10':458 '150.00':312 '1mb':590 '2':553 '3':561 '30':460 '4':571 '4.27.0':57 '5':584 '60':506 '64kb':591 '99.99':161 'access':538 'acknowledg':471 'action':625 'amount':288,297,301 'api':69 'applic':9,41,619 'arrays.aslist':173,223,475,488,494,500 'ask':663 'async':106,240 'asynccli':112 'asyncclient.sendevent':243 'asyncclient.sendevents':258 'azur':2,11,27,31,44,54,125,602,610 'azure-eventgrid-java':1 'azure-messaging-eventgrid':53 'azurekeycredenti':78,89,118,443 'bash':528 'basic':593 'batch':219,543 'best':540 'binarydata':135,360 'binarydata.fromobject':156,178,185,205,320 'binarydata.fromstring':228,235 'blob':418 'blobdata':413 'blobdata.geturl':420 'block':271,272 'boundari':671 'build':5,37,104 'buildclient':452 'buildcloudeventpublishercli':90 'buildeventgrideventpublisherasynccli':119 'buildeventgrideventpublishercli':79,105 'built':575 'built-in':574 'call':550 'catch':516 'clarif':665 'class':278,281,570 'clear':638 'client':58,72,97,107 'client.sendevent':165,514 'client.sendevents':188 'cloudclient':83 'cloudclient.sendevent':215 'cloudclient.sendevents':238 'cloudev':81,130,132,191,197,198,200,216,218,222,225,232,239,368,377,381,383,465,603 'cloudevent.fromstring':378 'cloudevent.setid':212 'cloudevent.setsubject':210 'cloudeventdataformat.json':208,230,237 'cloudeventjson':373,379 'cncf':131 'com.azure':52 'com.azure.core.credential.azurekeycredential':67 'com.azure.core.exception.httpresponseexception':512 'com.azure.core.models.cloudevent':194,371 'com.azure.core.models.cloudeventdataformat':196 'com.azure.core.util.binarydata':147 'com.azure.identity.defaultazurecredentialbuilder':95 'com.azure.messaging.eventgrid.eventgridevent':145,329 'com.azure.messaging.eventgrid.eventgridpublisherasyncclient':110 'com.azure.messaging.eventgrid.eventgridpublisherclient':63 'com.azure.messaging.eventgrid.eventgridpublisherclientbuilder':65 'com.azure.messaging.eventgrid.namespaces.eventgridreceiverclient':431 'com.azure.messaging.eventgrid.namespaces.eventgridreceiverclientbuilder':433 'com.azure.messaging.eventgrid.namespaces.models':435 'com.azure.messaging.eventgrid.systemevents':403 'consid':578 'core':139 'creation':59 'credenti':76,87,101,116,441 'criteria':674 'custom':136,275 'customerid':291 'data':162,207,277,359,361,394,569 'data.toobject':365 'data1':229 'data2':236 'dataformat':209 'datavers':164 'dead':580 'dead-lett':579 'dedupl':560 'defaultazurecredenti':92 'defaultazurecredentialbuild':103 'delay':498 'describ':626,642 'descript':123 'detail':463 'detail.getbrokerproperties':476 'detail.getevent':467 'doonerror':266 'doonsuccess':260 'doubl':287,296 'driven':8,40,607 'duration.ofseconds':459 'e':518 'e.g':333 'e.getmessage':525 'e.getresponse':521 'endpoint':75,86,100,115,440,532 'environ':526,654 'environment-specif':653 'equal':410 'error':251,253,267,270,508,524 'error.getmessage':254 'event':7,12,20,30,32,39,45,120,126,138,149,166,169,172,189,244,248,257,259,264,276,314,324,340,345,346,348,355,382,400,406,407,421,454,466,469,473,481,515,529,536,544,547,557,568,585,588,597,601,606,612 'event-driven':6,38,605 'event.getdata':362,395,414 'event.geteventtime':357 'event.geteventtype':350,409 'event.getid':392 'event.getsource':389 'event.getsubject':353 'event.gettype':386,470 'event.type1':227 'event.type2':234 'eventgrid':3,56 'eventgrid.azure.net':534 'eventgrid.azure.net/api/events':533 'eventgridev':124,142,148,151,175,182,313,316,326,344,405 'eventgridevent.fromstring':341 'eventgridpublisherasynccli':111 'eventgridpublishercli':60,71,82,96 'eventgridpublisherclientbuild':74,85,99,114 'eventgridreceivercli':436 'eventgridreceiverclientbuild':439 'eventtyp':155 'execut':621 'expert':659 'fail':269 'failur':583 'get':358 'getlocktoken':477 'getstatuscod':522 'getter':302 'grid':13,33,46,127,422,530,537,598 'handl':398,509 'httpresponseexcept':517 'id':338,391,558 'idempot':554 'implement':21 'import':62,64,66,94,109,144,146,193,195,328,370,402,430,432,434,511 'includ':555 'input':668 'instal':50 'integr':25 'java':4,16,36,49,61,93,108,143,170,192,220,242,279,327,369,401,429,482,510,599 'json':331 'jsonpayload':337,342 'keep':587 'key':70,539 'later':492 'letter':581 'limit':630 'list':171,221,339,376 'locktoken':489,495,501 'logic':573 'match':639 'messag':55,608 'microsoft.storage.blobcreated':411 'miss':676 'mqtt/pull':424 'multipl':168,256,546 'my-subscript':449 'my-top':445 'myapp.events.ordercreated':154 'myapp.order.created':319 'myeventdata':393 'myeventdata.class':397 'namespac':423,427 'nativ':128 'need':274 'new':73,77,84,88,98,102,113,117,150,157,174,181,199,224,231,308,315,438,442,502 'one':549 'ord':310 'order':159,307,317,321 'order.created':177,184,203 'order.getorderid':318 'order1':179 'order2':186 'orderdata':158,206,282,293,306,309,363,364 'orderdata.class':366 'orderid':285,295,299 'orders/1':176 'orders/12345':211 'orders/2':183 'output':648 'overview':629 'pars':325,367 'pattern':23,140 'payload':335 'permiss':669 'phrase':596 'possibl':552 'practic':541 'privat':283,286,289 'pub/sub':22,609 'public':280,292 'publish':19,141,167,190,217,241,600 'receiv':323,425,453 'receivedetail':462 'receivercli':437 'receiverclient.acknowledge':474 'receiverclient.receive':457 'receiverclient.reject':487 'receiverclient.release':493,499 'receiveresult':455 'reject':478,483 'releas':480,490,496 'releasedelay.by':505 'releaseopt':503 'requir':667 'resource/path':152 'result':456 'result.getvalue':464 'retri':486,491,572 'review':660 'safeti':670 'schema':129,137,562 'scope':641 'sdk':14,34,47,604 'second':507 'send':545 'sent':249,265 'servic':28 'setdelay':504 'setter':304 'size':586 'skill':617,633 'skill-azure-eventgrid-java' 'sourc':202,388 'source-sickn33' 'specif':134,655 'specvers':374 'status':520 'stop':661 'storageblobcreatedeventdata':412 'storageblobcreatedeventdata.class':416 'string':284,290,294,332,336,372 'strong':566 'strongly-typ':565 'subject':153,352 'subscrib':245 'subscript':451 'subscriptionnam':448 'substitut':651 'success':250,673 'system':399 'system.err.println':252,268 'system.out.println':247,262,347,351,354,384,387,390,417,468,519,523 'task':637 'test':657 'this.amount':300 'this.orderid':298 'tier':594 'time':356 'toobject':396,415 'topic':428,447,531 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'topicnam':444 'tostr':214 'treat':646 'tri':513 'trigger':595 'type':121,122,204,349,385,567 'uniqu':556 'unus':246,261 'url':419 'usag':305 'use':17,42,564,615,631 'uuid.randomuuid':213 'valid':563,656 'variabl':527 'via':29 'webhook':334,611 'workflow':623 'xml':51","prices":[{"id":"e12f4747-0b72-4816-90cf-6825a58052a4","listingId":"a76c633c-6da5-462e-99df-2144b4449a88","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:23.210Z"}],"sources":[{"listingId":"a76c633c-6da5-462e-99df-2144b4449a88","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-eventgrid-java","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-eventgrid-java","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:23.210Z","lastSeenAt":"2026-04-24T18:50:30.248Z"}],"details":{"listingId":"a76c633c-6da5-462e-99df-2144b4449a88","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-eventgrid-java","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"609f6f20222a5a8a7cbe3e5ef88a416911d47d25","skill_md_path":"skills/azure-eventgrid-java/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-eventgrid-java"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-eventgrid-java","description":"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."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-eventgrid-java"},"updatedAt":"2026-04-24T18:50:30.248Z"}}