[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-c4f04d02-4b57-4aab-9ad2-56c3baa27d3a":3,"$f7BFKkcSZhRfFa2UFQs_hPxV7HdqVesLsLznykrTzWr4":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"c4f04d02-4b57-4aab-9ad2-56c3baa27d3a","azure-eventgrid-java","使用 Azure Event Grid SDK for Java 构建事件驱动的应用程序。用于发布事件、实现发布\u002F订阅模式或通过事件与 Azure 服务集成。","cat_coding_devops","mod_coding","sickn33,coding","---\nname: azure-eventgrid-java\ndescription: \"Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub\u002Fsub patterns, or integrating with Azure services via events.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# 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\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-messaging-eventgrid\u003C\u002FartifactId>\n    \u003Cversion>4.27.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\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\u002F\u002F With API Key\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildEventGridEventPublisherClient();\n\n\u002F\u002F For CloudEvents\nEventGridPublisherClient\u003CCloudEvent> cloudClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildCloudEventPublisherClient();\n```\n\n### With DefaultAzureCredential\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildEventGridEventPublisherClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherAsyncClient;\n\nEventGridPublisherAsyncClient\u003CEventGridEvent> asyncClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-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\u002Fpath\",           \u002F\u002F subject\n    \"MyApp.Events.OrderCreated\", \u002F\u002F eventType\n    BinaryData.fromObject(new OrderData(\"order-123\", 99.99)), \u002F\u002F data\n    \"1.0\"                      \u002F\u002F dataVersion\n);\n\nclient.sendEvent(event);\n```\n\n### Publish Multiple Events\n\n```java\nList\u003CEventGridEvent> events = Arrays.asList(\n    new EventGridEvent(\"orders\u002F1\", \"Order.Created\", \n        BinaryData.fromObject(order1), \"1.0\"),\n    new EventGridEvent(\"orders\u002F2\", \"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    \"\u002Fmyapp\u002Forders\",           \u002F\u002F source\n    \"order.created\",           \u002F\u002F type\n    BinaryData.fromObject(orderData), \u002F\u002F data\n    CloudEventDataFormat.JSON  \u002F\u002F dataFormat\n);\ncloudEvent.setSubject(\"orders\u002F12345\");\ncloudEvent.setId(UUID.randomUUID().toString());\n\ncloudClient.sendEvent(cloudEvent);\n```\n\n### Publish CloudEvents Batch\n\n```java\nList\u003CCloudEvent> cloudEvents = Arrays.asList(\n    new CloudEvent(\"\u002Fapp\", \"event.type1\", BinaryData.fromString(\"data1\"), CloudEventDataFormat.JSON),\n    new CloudEvent(\"\u002Fapp\", \"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\u002F\u002F 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(); \u002F\u002F 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    \u002F\u002F Getters and setters\n}\n\n\u002F\u002F Usage\nOrderData order = new OrderData(\"ORD-123\", 150.00);\nEventGridEvent event = new EventGridEvent(\n    \"orders\u002F\" + 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\u002F\u002F From JSON string (e.g., webhook payload)\nString jsonPayload = \"[{\\\"id\\\": \\\"...\\\", ...}]\";\nList\u003CEventGridEvent> 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    \u002F\u002F 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\u003CCloudEvent> 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\u002FPull)\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(\"\u003Cnamespace-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Ckey>\"))\n    .topicName(\"my-topic\")\n    .subscriptionName(\"my-subscription\")\n    .buildClient();\n\n\u002F\u002F 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    \u002F\u002F Acknowledge the event\n    receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken()));\n}\n```\n\n### Reject or Release Events\n\n```java\n\u002F\u002F Reject (don't retry)\nreceiverClient.reject(Arrays.asList(lockToken));\n\n\u002F\u002F Release (retry later)\nreceiverClient.release(Arrays.asList(lockToken));\n\n\u002F\u002F 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:\u002F\u002F\u003Ctopic-name>.\u003Cregion>.eventgrid.azure.net\u002Fapi\u002Fevents\nEVENT_GRID_ACCESS_KEY=\u003Cyour-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\u002Fsub 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.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,77,765,"2026-05-16 13:06:16",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"DevOps","devops","mdi-cog-outline","CI\u002FCD、容器化、部署运维",3,162,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"72d3a049-c102-43eb-a0a9-f861e8c90e95","1.0.0","azure-eventgrid-java.zip",2880,"uploads\u002Fskills\u002Fc4f04d02-4b57-4aab-9ad2-56c3baa27d3a\u002Fazure-eventgrid-java.zip","59f51a2a25dbe5f2c774343952bd25606222ad1368314f1dd59b5c65ae4756eb","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":8784}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]