Skip to content

Commit e71cc53

Browse files
authored
Add Vertx example (#195)
* Add Vertx example Signed-off-by: Pierangelo Di Pilato <pierangelodipilato@gmail.com> * Apply suggestion Signed-off-by: Pierangelo Di Pilato <pierangelodipilato@gmail.com>
1 parent 862e4a6 commit e71cc53

File tree

5 files changed

+167
-0
lines changed

5 files changed

+167
-0
lines changed

examples/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
<modules>
1717
<module>kafka</module>
18+
<module>vertx</module>
1819
</modules>
1920

2021

examples/vertx/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Vertx + CloudEvents sample
2+
3+
## Build
4+
5+
```shell
6+
mvn package
7+
```
8+
9+
## Start HTTP Server
10+
11+
```shell
12+
mvn exec:java -Dexec.mainClass="io.cloudevents.examples.vertx.SampleHTTPServer" -Dexec.args="8080"
13+
```
14+
15+
## Start HTTP Client
16+
17+
```shell
18+
mvn exec:java -Dexec.mainClass="io.cloudevents.examples.vertx.SampleHTTPClient" -Dexec.args="http://localhost:8080"
19+
```

examples/vertx/pom.xml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>cloudevents-examples</artifactId>
7+
<groupId>io.cloudevents</groupId>
8+
<version>2.0.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>cloudevents-vertx-example</artifactId>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>io.cloudevents</groupId>
17+
<artifactId>cloudevents-http-vertx</artifactId>
18+
<version>${project.version}</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>io.cloudevents</groupId>
22+
<artifactId>cloudevents-json-jackson</artifactId>
23+
<version>${project.version}</version>
24+
</dependency>
25+
</dependencies>
26+
27+
</project>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package io.cloudevents.examples.vertx;
2+
3+
import io.cloudevents.CloudEvent;
4+
import io.cloudevents.core.builder.CloudEventBuilder;
5+
import io.cloudevents.core.message.MessageReader;
6+
import io.cloudevents.http.vertx.VertxMessageFactory;
7+
import io.cloudevents.jackson.JsonFormat;
8+
import io.vertx.core.Vertx;
9+
import io.vertx.core.http.HttpClient;
10+
import io.vertx.core.http.HttpClientRequest;
11+
import java.net.URI;
12+
import java.util.UUID;
13+
14+
public class SampleHTTPClient {
15+
16+
private static final int NUM_EVENTS = 20;
17+
18+
public static void main(String[] args) {
19+
20+
if (args.length != 1) {
21+
System.err.println("Usage: SampleHTTPClient <event_sink>");
22+
return;
23+
}
24+
final String eventSink = args[0];
25+
26+
final Vertx vertx = Vertx.vertx();
27+
final HttpClient httpClient = vertx.createHttpClient();
28+
29+
// Create an event template to set basic CloudEvent attributes.
30+
CloudEventBuilder eventTemplate = CloudEventBuilder.v1()
31+
.withSource(URI.create("https://github.com/cloudevents/sdk-java/tree/master/examples/vertx"))
32+
.withType("vertx.example");
33+
34+
// Send NUM_EVENTS events.
35+
for (int i = 0; i < NUM_EVENTS; i++) {
36+
37+
// create HTTP request.
38+
final HttpClientRequest request = httpClient.postAbs(eventSink)
39+
.handler(response -> {
40+
41+
// We need to read the event from the HTTP response we get, so create a MessageReader.
42+
VertxMessageFactory.createReader(response)
43+
// Covert the MessageReader to a CloudEvent.
44+
.map(MessageReader::toEvent)
45+
// Print out the event.
46+
.onSuccess(System.out::println)
47+
.onFailure(System.err::println);
48+
49+
})
50+
.exceptionHandler(System.err::println);
51+
52+
String id = UUID.randomUUID().toString();
53+
String data = "Event number " + i;
54+
55+
// Create the event starting from the template
56+
final CloudEvent event = eventTemplate.newBuilder()
57+
.withId(id)
58+
.withData("text/plain", data.getBytes())
59+
.build();
60+
61+
// We need to write the event to the request, so create a MessageWriter.
62+
if (i % 2 == 0) {
63+
VertxMessageFactory.createWriter(request)
64+
.writeBinary(event); // Use binary mode.
65+
} else {
66+
VertxMessageFactory.createWriter(request)
67+
.writeStructured(event, new JsonFormat()); // Use structured mode.
68+
}
69+
}
70+
}
71+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package io.cloudevents.examples.vertx;
2+
3+
import io.cloudevents.core.message.MessageReader;
4+
import io.cloudevents.http.vertx.VertxMessageFactory;
5+
import io.vertx.core.Vertx;
6+
7+
public class SampleHTTPServer {
8+
9+
public static void main(String[] args) {
10+
11+
if (args.length != 1) {
12+
System.err.println("Usage: SampleHTTPServer <port>");
13+
return;
14+
}
15+
final int port = Integer.parseInt(args[0]);
16+
17+
final Vertx vertx = Vertx.vertx();
18+
19+
// Create HTTP server.
20+
vertx.createHttpServer()
21+
.exceptionHandler(System.err::println)
22+
.requestHandler(request -> {
23+
24+
// We need to read the event from the HTTP request we get, so create a MessageReader.
25+
VertxMessageFactory.createReader(request)
26+
// Covert the MessageReader to a CloudEvent.
27+
.map(MessageReader::toEvent)
28+
.onSuccess(event -> {
29+
// Print out the event.
30+
System.out.println(event);
31+
32+
// Write the same event as response in binary mode.
33+
VertxMessageFactory.createWriter(request.response()).writeBinary(event);
34+
})
35+
.onFailure(System.err::println);
36+
37+
38+
})
39+
.listen(port, server -> {
40+
if (server.succeeded()) {
41+
System.out.println(
42+
"Server listening on port: " + server.result().actualPort()
43+
);
44+
} else {
45+
System.err.println(server.cause().getMessage());
46+
}
47+
});
48+
}
49+
}

0 commit comments

Comments
 (0)