Java SDK for CloudEvents
Go to file
slinkydeveloper 4df01cd279 Progress on implementing serialization
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
2020-04-20 21:01:10 +02:00
api Progress on implementing serialization 2020-04-20 21:01:10 +02:00
cdi 🔖 Set versions to 1.3.0 2020-03-04 20:48:47 -03:00
formats/json-jackson Progress on implementing serialization 2020-04-20 21:01:10 +02:00
http/vertx 🔖 Set versions to 1.3.0 2020-03-04 20:48:47 -03:00
kafka Compiles! 2020-04-20 15:52:49 +02:00
.editorconfig EditorConfig for file editing patterns 2020-03-04 20:38:59 -03:00
.gitignore ☁️ CloudEvent Java API 2018-10-06 09:13:59 +02:00
.travis.deploy.sh gpg batch sign: finally works 2019-09-28 11:18:59 -03:00
.travis.pubring Pubring open at all 2019-09-27 21:47:59 -03:00
.travis.secring.enc New secring 2019-09-28 10:40:48 -03:00
.travis.settings.xml Maven settings for automated release 2019-09-26 17:00:41 -03:00
.travis.yml Fix github release api_key 2019-09-30 10:28:37 -03:00
CHANGELOG.md Changelog for version 1.3.0 2020-03-04 20:39:27 -03:00
LICENSE Initial commit 2018-09-20 15:56:37 -04:00
README.md 🔖 Set versions to 1.3.0 2020-03-04 20:48:47 -03:00
pom.xml cloudevents-api does not depend on jackson anymore 2020-04-20 16:57:58 +02:00

README.md

Java SDK for CloudEvents API

Build Status License Maven Central Javadocs

A Java API for the CloudEvents specification

Checkout the changelog

Status

This SDK current supports the following versions of CloudEvents:

  • v1.0

Motivation

The CloudEvents specification is a vendor-neutral specification for defining the format of event data that is being exchanged between different cloud systems. The specification basically defines an abstract envelope for any event data payload, without knowing specific implementation details of the actual underlying event. The current version of the spec is at 0.3 and it describes a simple event format, which was demonstrated at KubeCon 2018 using different Serverless platforms, such as Apache Openwhisk.

Java API

For Maven based projects, use the following to configure the CloudEvents Java SDK:

<dependency>
    <groupId>io.cloudevents</groupId>
    <artifactId>cloudevents-api</artifactId>
    <version>1.3.0</version>
</dependency>

Application developers can now create strongly-typed CloudEvents, such as:

import io.cloudevents.v1.CloudEventBuilder;
import io.cloudevents.v1.CloudEventImpl;
import io.cloudevents.extensions.ExtensionFormat;
import io.cloudevents.json.Json;
import io.cloudevents.extensions.DistributedTracingExtension;

// given
final String eventId = UUID.randomUUID().toString();
final URI src = URI.create("/trigger");
final String eventType = "My.Cloud.Event.Type";
final MyCustomEvent payload = ...

// add trace extension usin the in-memory format
final DistributedTracingExtension dt = new DistributedTracingExtension();
dt.setTraceparent("00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01");
dt.setTracestate("rojo=00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01");

final ExtensionFormat tracing = new DistributedTracingExtension.Format(dt);

// passing in the given attributes
final CloudEventImpl<MyCustomEvent> cloudEvent =
  CloudEventBuilder.<MyCustomEvent>builder()
    .withType(eventType)
    .withId(eventId)
    .withSource(src)
    .withData(payload)
    .withExtension(tracing)
    .build();

// marshalling as json
final String json = Json.encode(cloudEvent);

Or, an event with binary event data:

import io.cloudevents.v1.CloudEventBuilder;
import io.cloudevents.v1.CloudEventImpl;
import io.cloudevents.extensions.ExtensionFormat;
import io.cloudevents.json.Json;
import io.cloudevents.extensions.DistributedTracingExtension;

// given
final String eventId = UUID.randomUUID().toString();
final URI src = URI.create("/trigger");
final String eventType = "My.Cloud.Event.Type";
final byte[] payload = "a-binary-event-data".getBytes();

// passing in the given attributes
final CloudEventImpl<String> cloudEvent =
  CloudEventBuilder.<String>builder()
    .withType(eventType)
    .withId(eventId)
    .withSource(src)
    .withDataBase64(payload)
    .build();

// marshalling as json that will have the data_base64
final String json = Json.encode(cloudEvent);

There are other detailed ways of how to use the marshallers and unmarshallers with HTTP transport binding.

Kafka

The support for kafka protocol binding is available. Read the documentation and examples of use.

Possible Integrations

The API is kept simple, for allowing a wide range of possible integrations:

Community

  • There are bi-weekly calls immediately following the Serverless/CloudEvents call at 9am PT (US Pacific). Which means they will typically start at 10am PT, but if the other call ends early then the SDK call will start early as well. See the CloudEvents meeting minutes to determine which week will have the call.
  • Slack: #cloudeventssdk channel under CNCF's Slack workspace.
  • Contact for additional information: Fabio José (@fabiojose on slack).