Current version is 1.0.0-beta.1, click here for the index

Azure Cloud Native Cloud Event client library for Java

This library can be used to enable publishing the Cloud Native Computing Foundation(CNCF) CloudEvents using the Azure Event Grid library.

Getting started

Prerequisites

You should have an EventGrid client before using this bridge library. Follow Azure EventGrid steps to create an EventGrid client.

Include the package

Include direct dependency

If you want to take dependency on a particular version of the library, add the direct dependency to your project as follows.

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-eventgrid-cloudnative-cloudevents</artifactId>
    <version>1.0.0-beta.1</version>
</dependency>

Key concepts

For information about general Event Grid concepts: Concepts in Azure Event Grid.

For detailed information about the Event Grid client library concepts: Event Grid Client Library.

Examples

Sending CNCF CloudEvents To Event Grid Topics

// Prepare Event Grid client
EventGridPublisherClient<com.azure.core.models.CloudEvent> egClient =
    new EventGridPublisherClientBuilder()
        .endpoint(System.getenv("AZURE_EVENTGRID_CLOUDEVENT_ENDPOINT"))
        .credential(new AzureKeyCredential(System.getenv("AZURE_EVENTGRID_CLOUDEVENT_KEY")))
        .buildCloudEventPublisherClient();

// Prepare a native cloud event input, the cloud event input should be replace with your own.
CloudEvent cloudEvent =
    CloudEventBuilder.v1()
        .withData("{\"name\": \"joe\"}".getBytes(StandardCharsets.UTF_8)) // Replace it
        .withId(UUID.randomUUID().toString()) // Replace it
        .withType("User.Created.Text") // Replace it
        .withSource(URI.create("http://localHost")) // Replace it
        .withDataContentType("application/json") // Replace it
        .build();

// Publishing a single event
EventGridCloudNativeEventPublisher.sendEvent(egClient, cloudEvent);

Sending CNCF CloudEvents To Event Grid Domain

When publishing to an Event Grid domain with cloud events, the cloud event source is used as the domain topic. The Event Grid service doesn't support using an absolute URI for a domain topic, so you would need to do something like the following to integrate with the cloud native cloud events:

// Prepare Event Grid client
EventGridPublisherClient<com.azure.core.models.CloudEvent> egClient =
    new EventGridPublisherClientBuilder()
        .endpoint(System.getenv("AZURE_EVENTGRID_CLOUDEVENT_ENDPOINT"))
        .credential(new AzureKeyCredential(System.getenv("AZURE_EVENTGRID_CLOUDEVENT_KEY")))
        .buildCloudEventPublisherClient();

// Prepare a native cloud event input, the cloud event input should be replace with your own.
CloudEvent cloudEvent =
    CloudEventBuilder.v1()
        .withData("{\"name\": \"joe\"}".getBytes(StandardCharsets.UTF_8)) // Replace it
        .withId(UUID.randomUUID().toString()) // Replace it
        .withType("User.Created.Text") // Replace it
        // Replace it. Event Grid does not allow absolute URIs as the domain topic.
        // For example, use the Event Grid Domain resource name as the relative path.
        .withSource(URI.create("/relative/path"))
        .withDataContentType("application/json") // Replace it
        .build();

// Publishing a single event
EventGridCloudNativeEventPublisher.sendEvent(egClient, cloudEvent);

Troubleshooting

Responses and error codes

Service responses are returned in the form of Http status codes, including a number of error codes. These codes can optionally be returned by the PublisherClient. Unexpected status codes are thrown as HttpResponseException which wraps the error code.

Reference documentation for the event grid service can be found [here][service_docs]. This is a good place to start for problems involving configuration of topics/endpoints, as well as for problems involving error codes from the service.

Help and Issues

Reference documentation for the SDK can be found here. This is a good first step to understanding the purpose of each method called, as well as possible reasons for errors or unexpected behavior.

If you encounter any bugs with these SDKs, please file issues via Issues or checkout StackOverflow for Azure Java SDK.

Next steps

  • Azure Java SDKs
  • If you don't have a Microsoft Azure subscription you can get a FREE trial account here

Contributing

If you would like to become an active contributor to this project please refer to our Contribution Guidelines for more information.

Packages 
Package Description
com.azure.messaging.eventgrid.cloudnative.cloudevents
Package containing the classes for EventGridClient.