In our Tech Radar we put CloudEvents in the trial phase. We’d like to take you on a journey and show you what CloudEvents are and how they can be used. In this first blog we will be looking at the CloudEvent specification and the serialized end result!

Why CloudEvents?

Taken from their own specification:

CloudEvents is a specification for describing event data in common formats to provide interoperability across services, platforms and systems.

We could look at CloudEvents as something similar to SOAP or REST, a standardized way of communicating over a protocol, in this case for events.

So what does a CloudEvent look like?

The CloudEvent specification is a set of attributes, some required and some optional, that provide a standardized way to publish events including metadata about the event.

The required attributes
Attribute Description Example

id*

Identifier for the event

1

source*

Defines the context in which an event happened

/jdriven/blog

specversion

The version of the CloudEvents specification which the event uses

1.0

type

Defines the type of event related to the originating occurrence

com.jdriven.blog.1.0.0

*Notice that the combination of source + id has to be unique.

The optional attributes
Attribute Description Example

datacontenttype

Defines the content type of the data value

text/xml

dataschema

Defines the schema that the data value adheres to.

schemas.jdriven.com/blog

subject

Defines the subject of the event in the context of the event producer. Allows for more specific filtering when source attribute does not suffice

Draft blog

time

Timestamp of when the occurrence happened

2024-06-07T17:15:00

data

The event payload

<blog><title>A first look at CloudEvents</title><author>Laurens Westerlaken</author></blog>

Can I add my own metadata attributes?

If for some reason you require more propriatary metadata for your events, CloudEvents has you covered with their extensions concept. A few default extensions exist for example for tracability purposes or sequencing of events. In a future blog we will show you how to implement your own custom extension as well!

Serialized result

After building a CloudEvent it gets serialized, for example to JSON, and published. Taking the above examples and serializing to JSON would result in the following:

{
    "id" : "1",
    "source" : "/jdriven/blog",
    "specversion" : "1.0",
    "type" : "com.jdriven.blog.1.0.0",
    "datacontenttype" : "text/xml",
    "dataschema" : "schemas.jdriven.com/blog",
    "subject" : "Draft blog",
    "time" : "2024-06-07T17:15:00",
    "data" : "<blog><title>A first look at CloudEvents</title><author>Laurens Westerlaken</author></blog>"
}

In the next blog about CloudEvents we will look at how we can apply this specification in practice.

shadow-left