SlideShare ist ein Scribd-Unternehmen logo
1 von 170
Reactive & Distributed
Orkhan Gasimov
Digital Transformation Architect @ GlobalLogic
15 years of software engineering;
training & mentorship;
author of trainings about:
Microservices;
Spring Cloud;
Akka;
2Speaker
Concept & Architecture
3Agenda
What is Vert.x?
4Agenda
Why Vert.x is Reactive?
5Agenda
How Vert.x is Distributed?
6Agenda
Vert.x
Reactive & Distributed
8What is Vert.x?
9Framework
Framework Your Code
10Library
Library Your Code
11Toolkit
Reactor Pattern
12Vert.x Core
Event Loop
(single thread,
non blocking)
Reactor Pattern
13Vert.x Core
Event Loop
(single thread,
non blocking)
Worker
Worker
Worker
delegate long
running jobs & IO
callback
Multi-Reactor
14Vert.x Core
Worker
Worker
Worker
delegate long
running jobs & IO
callback
Event
Loops
Event Bus
15Vert.x Core
Worker
Worker
Worker
delegate long
running jobs & IO
callback
Event
Loops
H
H
H
H
Basic Architecture
16Vert.x Core
Worker
Worker
Worker
delegate long
running jobs & IO
callback
Event
Loops
H
Client
Client
Client
H
H
H
request
response
17Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
18Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
19Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
20Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
HttpServerResponse response = routingContext.response();
21Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
HttpServerResponse response = routingContext.response();
sqlClient.updateWithParams("INSERT INTO names (name) VALUES (?)", new JsonArray().add(name),
22Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
HttpServerResponse response = routingContext.response();
sqlClient.updateWithParams("INSERT INTO names (name) VALUES (?)", new JsonArray().add(name), event -> {
if (event.succeeded()) {
response.end("Hello " + name);
}
23Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
HttpServerResponse response = routingContext.response();
sqlClient.updateWithParams("INSERT INTO names (name) VALUES (?)", new JsonArray().add(name), event -> {
if (event.succeeded()) {
response.end("Hello " + name);
} else {
System.out.println("Could not INSERT to database with cause: " + event.cause());
response.setStatusCode(500);
response.end();
}
});
});
24Java Example
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
JsonObject mySQLClientConfig = new JsonObject().put("host", "localhost").put("database", "test");
SQLClient sqlClient = MySQLClient.createShared(vertx, mySQLClientConfig);
router.get("/hello/:name").produces("text/plain").handler(routingContext -> {
String name = routingContext.pathParam("name");
HttpServerResponse response = routingContext.response();
sqlClient.updateWithParams("INSERT INTO names (name) VALUES (?)", new JsonArray().add(name), event -> {
if (event.succeeded()) {
response.end("Hello " + name);
} else {
System.out.println("Could not INSERT to database with cause: " + event.cause());
response.setStatusCode(500);
response.end();
}
});
});
HttpServer server = vertx.createHttpServer();
server.requestHandler(router::accept).listen(8080);
Deployment Model
Verticles
26Verticles
Verticle
Handler Handler Handler
Handler Handler Handler
27Verticles
Verticle Verticle Verticle
Verticle Verticle Verticle
Verticle Verticle Verticle
28Event Loops
Verticle Verticle Verticle
Verticle Verticle Verticle
Event
Loop
Event
Loop
Verticle Verticle Verticle
29Event Bus
Verticle
EVENT
BUS
Verticle Verticle
Verticle Verticle Verticle
Event
Loop
Event
Loop
Verticle Verticle Verticle
30Vert.x Runtime
Verticle
EVENT
BUS
Verticle Verticle
Verticle Verticle Verticle
Event
Loop
Event
Loop
Verticle Verticle Verticle
31Vert.x Runtime
Socket 1
…
...
Socket N
Verticle
EVENT
BUS
Verticle Verticle
Verticle Verticle Verticle
Event
Loop
Event
Loop
Verticle Verticle Verticle
32Vert.x Runtime
Socket 1
…
...
Socket N
Verticle
EVENT
BUS
Verticle Verticle
Verticle Verticle Verticle
CPU
Core
CPU
Core
Event
Loop
Event
Loop
Verticle Verticle Verticle
33Verticle
public class MyVerticle extends AbstractVerticle {
34Verticle
public class MyVerticle extends AbstractVerticle {
private HttpServer server;
35Verticle
public class MyVerticle extends AbstractVerticle {
private HttpServer server;
@Override
public void start(Future<Void> startFuture) {
36Verticle
public class MyVerticle extends AbstractVerticle {
private HttpServer server;
@Override
public void start(Future<Void> startFuture) {
server = vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
});
37Verticle
public class MyVerticle extends AbstractVerticle {
private HttpServer server;
@Override
public void start(Future<Void> startFuture) {
server = vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
});
server.listen(8080, res -> {
if (res.succeeded()) {
startFuture.complete();
} else {
startFuture.fail(res.cause());
}
});
}
38Verticle
public class MyVerticle extends AbstractVerticle {
private HttpServer server;
@Override
public void start(Future<Void> startFuture) {
server = vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
});
server.listen(8080, res -> {
if (res.succeeded()) {
startFuture.complete();
} else {
startFuture.fail(res.cause());
}
});
}
@Override
public void stop(Future<Void> stopFuture) {
//...
}
}
Standard Verticles
Run on an event loop thread
Verticles 39
Worker Verticles
Run on the worker pool & never executed concurrently
Verticles 40
Worker Verticles
Run on the worker pool & never executed concurrently
Verticles
DeploymentOptions options = new DeploymentOptions().setWorker(true);
vertx.deployVerticle("com.mycompany.MyOrderProcessorVerticle", options);
41
Multi-Threaded Worker Verticles
Run on the worker pool & can be executed concurrently
Verticles 42
Cluster
High Availability
High Availability 44
High Availability 45
High Availability 46
High Availability 47
High Availability 48
High Availability 49
Regions 50
Availability Zones 51
High Availability 52
High Availability 53
High Availability 54
High Availability 55
Cluster Manager
Vert.x
Instance
Vert.x
Instance
Vert.x
Instance
56
Cluster Manager
Cluster
Manager
Vert.x
Instance
Vert.x
Instance
Vert.x
Instance
57
Default:
Hazelcast
Cluster Manager
Cluster
Manager
Vert.x
Instance
Vert.x
Instance
Vert.x
Instance
58
Default:
Hazelcast
Alternatives:
Infinispan
Ignite
Zookeper
Cluster Manager
Cluster
Manager
Vert.x
Instance
Vert.x
Instance
Vert.x
Instance
59
Default:
Hazelcast
Alternatives:
Infinispan
Ignite
Zookeper
3rd party:
Atomix & etc.
Cluster Manager
Cluster
Manager
Vert.x
Instance
Vert.x
Instance
Vert.x
Instance
60
$ vertx run myVerticle -ha
Fail-Over
Vert.x Instance 1 Vert.x Instance N
...
Verticle
61
$ vertx run myVerticle -ha
Fail-Over
Vert.x Instance 1 Vert.x Instance N
...
Verticle
62
$ vertx run myVerticle -ha
Fail-Over
Vert.x Instance 1 Vert.x Instance N
...
Verticle
63
$ vertx run myVerticle -ha -hagroup group-1
Groups
Group-1
Vert.x Instance 1 Vert.x Instance N
Group-2
Vert.x Instance 1 Vert.x Instance N
...
...
Verticle
Verticle
64
$ vertx run myVerticle -ha -hagroup group-1
Groups
Group 1
Vert.x Instance 1 Vert.x Instance N
Group 2
Vert.x Instance 1 Vert.x Instance N
...
...
Verticle
Verticle
65
$ vertx run myVerticle -ha -hagroup group-1
Groups
Group 1
Vert.x Instance 1 Vert.x Instance N
Group 2
Vert.x Instance 1 Vert.x Instance N
...
...
Verticle
Verticle
66
$ vertx run myVerticle -ha -quorum 3
Quorum
Vert.x Instance 2
Vert.x Instance 3
Verticle
Verticle
Vert.x Instance 1
Verticle
67
$ vertx run myVerticle -ha -quorum 3
Quorum
Vert.x Instance 1 Vert.x Instance 2
Verticle
Vert.x Instance 3
Verticle
Verticle
68
$ vertx run myVerticle -ha -quorum 3
Quorum
Vert.x Instance 1 Vert.x Instance 2
Vert.x Instance 3
69
$ vertx run myVerticle -ha -quorum 3
Quorum
Vert.x Instance 2
Vert.x Instance 3
Vert.x Instance 1
70
$ vertx run myVerticle -ha -quorum 3
Quorum
Vert.x Instance 2
Vert.x Instance 3
Verticle
Verticle
Vert.x Instance 1
Verticle
71
Round-robin by default
Load Balancing
Verticle
Verticle
Verticle
Verticle
VerticleVerticle
1 2
3
72
Shared Data
SharedData sd = vertx.sharedData();
Maps 74
SharedData sd = vertx.sharedData();
//Local
LocalMap<String, String> localMap = sd.getLocalMap("myLocalMap");
localMap.put("foo", "bar");
String val = localMap.get("foo");
Maps 75
SharedData sd = vertx.sharedData();
//Local
LocalMap<String, String> localMap = sd.getLocalMap("myLocalMap");
localMap.put("foo", "bar");
String val = localMap.get("foo");
//Async
sd.<String, String>getAsyncMap("myAsyncMap", res -> {
if (res.succeeded()) {
AsyncMap<String, String> asyncMap = res.result();
} else {
//fail
}
});
Maps 76
...
//Async get
asyncMap.put("foo", "bar", resPut -> {
if (resPut.succeeded()) { /*success*/ } else { /*fail*/ }
});
Maps 77
...
//Async get
asyncMap.put("foo", "bar", resPut -> {
if (resPut.succeeded()) { /*success*/ } else { /*fail*/ }
});
//Async put
asyncMap.get("foo", resGet -> {
if (resGet.succeeded()) {
Object val = resGet.result();
} else {
//fail
}
});
Maps 78
sd.getLock("mylock", res -> {
if (res.succeeded()) {
Lock lock = res.result();
// 5 seconds later we release the lock so someone else can get it
vertx.setTimer(5000, tid -> lock.release());
} else {
// Something went wrong
}
});
Locks 79
sd.getLock("mylock", res -> {
if (res.succeeded()) {
Lock lock = res.result();
// 5 seconds later we release the lock so someone else can get it
vertx.setTimer(5000, tid -> lock.release());
} else {
// Something went wrong
}
});
sd.getLockWithTimeout("mylock", 10000, res -> {
if (res.succeeded()) {
Lock lock = res.result();
} else {
// Failed to get lock
}
});
Locks 80
sd.getCounter("mycounter", res -> {
if (res.succeeded()) {
Counter counter = res.result();
} else {
// Something went wrong!
}
});
Counters 81
Other Features
Vert.x Core
• File System
• TCP Servers & Clients
• HTTP Servers & Clients
• UDP Servers & Clients
• DNS Client
• Launcher (fat jars)
Other Core Features 83
Web
Server & Clients
Routing
HTTP Request Validation
OpenAPI 3 Support (with automatic requests validation)
Vert.x Web 85
HttpServer server = vertx.createHttpServer();
Web Server 86
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
Web Server 87
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.post("/entity/:id").handler(routingContext -> {
// This handler will be called for every request
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
// Write to the response and end it
response.end("Hello World from Vert.x-Web!");
});
Web Server 88
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.post("/entity/:id").handler(routingContext -> {
// This handler will be called for every request
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
// Write to the response and end it
response.end("Hello World from Vert.x-Web!");
});
server.requestHandler(router::accept).listen(8080);
Web Server 89
WebClient client = WebClient.create(vertx);
Web Client 90
WebClient client = WebClient.create(vertx);
client
.get(8080, "myserver.mycompany.com", "/some-uri")
Web Client 91
WebClient client = WebClient.create(vertx);
client
.get(8080, "myserver.mycompany.com", "/some-uri")
.timeout(5000)
Web Client 92
WebClient client = WebClient.create(vertx);
client
.get(8080, "myserver.mycompany.com", "/some-uri")
.timeout(5000)
.addQueryParam("param", "param_value")
Web Client 93
WebClient client = WebClient.create(vertx);
client
.get(8080, "myserver.mycompany.com", "/some-uri")
.timeout(5000)
.addQueryParam("param", "param_value")
.send(ar -> {
if (ar.succeeded()) {
// Obtain response
HttpResponse<Buffer> response = ar.result();
System.out.println("Received response with status code" + response.statusCode());
Web Client 94
WebClient client = WebClient.create(vertx);
client
.get(8080, "myserver.mycompany.com", "/some-uri")
.timeout(5000)
.addQueryParam("param", "param_value")
.send(ar -> {
if (ar.succeeded()) {
// Obtain response
HttpResponse<Buffer> response = ar.result();
System.out.println("Received response with status code" + response.statusCode());
} else {
System.out.println("Something went wrong " + ar.cause().getMessage());
}
});
Web Client 95
client
.post(8080, "myserver.mycompany.com", "/some-uri")
.sendJsonObject(new JsonObject()
.put("firstName", "Dale")
.put("lastName", "Cooper"), ar -> {
if (ar.succeeded()) {
// Ok
}
});
Web Client 96
client
.post(8080, "myserver.mycompany.com", "/some-uri")
.sendJsonObject(new JsonObject()
.put("firstName", "Dale")
.put("lastName", "Cooper"), ar -> {
if (ar.succeeded()) {
// Ok
}
});
client
.post(8080, "myserver.mycompany.com", "/some-uri")
.sendJson(new User("Dale", "Cooper"), ar -> {
if (ar.succeeded()) {
// Ok
}
});
Web Client 97
Auth
Authentication & Authorization
• OAuth 2
• JWT
• Apache Shiro
• JDBC
• MongoDB
• .htdigest
Auth Prodivers 99
• OAuth 2
• JWT
• Apache Shiro
• JDBC
• MongoDB
• .htdigest
• ... your implementation
Auth Prodivers 100
router.route("/private/somepath").handler(routingContext -> {
User user = routingContext.user();
Auth 101
router.route("/private/somepath").handler(routingContext -> {
User user = routingContext.user();
user.isAuthorised("permission_or_authority", event -> {
//async handler
});
Auth 102
router.route("/private/somepath").handler(routingContext -> {
User user = routingContext.user();
user.isAuthorised("permission_or_authority", event -> {
//async handler
});
user.isAuthorised("role:role_name", event -> {
//async handler
});
});
Auth 103
Microservices
Microservices
Sales
105
Microservices
Sales
Users
106
Microservices
Sales
WarehouseUsers
107
Microservices
Sales
WarehouseUsers
DB
108
Microservices
Sales
Accounting
WarehouseUsers
DB
109
Microservices
Sales
Accounting
WarehouseUsers
StoresDB
110
Microservices
Sales
Accounting
WarehouseUsers
Stores
HTTP
HTTP HTTP
HTTP HTTP
DB
SQL
111
Microservices
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
112
Microservices
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
113
• Publish & Discover
• HTTP Endpoints
Service Discovery
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
114
• Publish & Discover
• HTTP Endpoints
• Data Sources
Service Discovery
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
115
• Publish & Discover
• HTTP Endpoints
• Data Sources
• Event Bus Services
Service Discovery
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
116
• Publish & Discover
• HTTP Endpoints
• Data Sources
• Event Bus Services
• Anything you can imagine
Service Discovery
Sales
Accounting
WarehouseUsers
Stores
HTTP
DB
SQL
117
Circuit Breaker 118
Closed
Success
Circuit Breaker 119
Closed
Open
Success
Too many fails
Circuit Breaker 120
Closed
Open
Success
Too many fails
Fast Fail
Circuit Breaker 121
Closed
Open
Half-Open
Success
Too many fails
Fast Fail
Try one request
Circuit Breaker 122
Closed
Open
Half-Open
Success
Too many fails
Fast Fail
Try one request
Fail
Circuit Breaker 123
Closed
Open
Half-Open
Success
Too many fails
Fast Fail
Try one request
Fail
Success
CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
Circuit Breaker 124
CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
new CircuitBreakerOptions()
.setMaxFailures(5) // number of failure before opening the circuit
.setTimeout(2000) // consider a failure if the operation does not succeed in time
.setFallbackOnFailure(true) // do we call the fallback on failure
.setResetTimeout(10000) // time spent in open state before attempting to re-try
);
Circuit Breaker 125
CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
new CircuitBreakerOptions()
.setMaxFailures(5) // number of failure before opening the circuit
.setTimeout(2000) // consider a failure if the operation does not succeed in time
.setFallbackOnFailure(true) // do we call the fallback on failure
.setResetTimeout(10000) // time spent in open state before attempting to re-try
);
breaker.execute(future -> {
// future.complete(“success")
// future.fail("cause")
}).setHandler(ar -> {
// Get the operation result.
});
Circuit Breaker 126
CircuitBreaker breaker = CircuitBreaker.create("my-circuit-breaker", vertx,
new CircuitBreakerOptions()
.setMaxFailures(5) // number of failure before opening the circuit
.setTimeout(2000) // consider a failure if the operation does not succeed in time
.setFallbackOnFailure(true) // do we call the fallback on failure
.setResetTimeout(10000) // time spent in open state before attempting to re-try
);
breaker.executeWithFallback(future -> {
// future.complete(“success")
// future.fail("cause")
}, th -> {
// Fallback
return "Hello";
}).setHandler(ar -> {
// Get the operation result.
});
Circuit Breaker 127
• Formats
• Properties
• JSON
• YAML
• etc.
Config 128
• Formats
• Properties
• JSON
• YAML
• etc.
Config
• Sources
• File / Directory
• Environment Variables
• System Properties
• HTTP
• Event Bus
• Git
• Kubernetes ConfigMap
• Redis
• Zookeeper / Consul
• Vault
• Spring Config Server
• etc.
129
Data Access
SQL & NoSQL
Out of the box
• SQL
• JDBC
• MySQL
• PostgreSQL
Data Access 131
Out of the box
• SQL
• JDBC
• MySQL
• PostgreSQL
• NoSQL
• MongoDB
• Redis
Data Access 132
Out of the box
• SQL
• JDBC
• MySQL
• PostgreSQL
• NoSQL
• MongoDB
• Redis
3rd party
• Anything...
Data Access 133
Integration
135Integration
• Event Bus Bridges
• TCP Bridge
136Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
137Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
138Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
• Messaging & Streaming
• RabbitMQ Client
• Kafka Client
139Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
• Messaging & Streaming
• RabbitMQ Client
• Kafka Client
• STOMP Server & Client
140Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
• Messaging & Streaming
• RabbitMQ Client
• Kafka Client
• STOMP Server & Client
• IoT
• MQTT
141Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
• Messaging & Streaming
• RabbitMQ Client
• Kafka Client
• STOMP Server & Client
• IoT
• MQTT
• Java EE
• JCA Resource Adaptor
142Integration
• Event Bus Bridges
• TCP Bridge
• Camel Bridge
• AMQP Bridge
• Messaging & Streaming
• RabbitMQ Client
• Kafka Client
• STOMP Server & Client
• IoT
• MQTT
• Java EE
• JCA Resource Adaptor
• Misc
• Mail Client
• Consul Client
Metrics
Metrics 144
Micrometer
Metrics 145
Micrometer
SignalFx
StatsD
New Relix
Influx/Telegraf
JMXPrometheus
Netflix Atlas
CloudWatch
Datadog
Graphite
Ganglia Wavefront
Metrics 146
Dropwizard
Micrometer
Health Check
API
Reactive
• Vert.x supports
• RxJava 1
Reactive Programming 148
• Vert.x supports
• RxJava 1
• RxJava 2
Reactive Programming 149
• Vert.x supports
• RxJava 1
• RxJava 2
• Reactive Streams (publishers & subscribers)
Reactive Programming 150
fileSystem
.rxReadFile("cities.txt").toFlowable()
.flatMap(buffer -> Flowable.fromArray(buffer.toString().split("r?n")))
.flatMap(city -> searchByCityName(httpClient, city))
.flatMap(HttpClientResponse::toFlowable)
.map(extractingWoeid())
.flatMap(cityId -> getDataByPlaceId(httpClient, cityId))
.flatMap(toBufferFlowable())
.map(Buffer::toJsonObject)
.map(toCityAndDayLength())
.subscribe(System.out::println, Throwable::printStackTrace);
Reactive Programming 151
Observable<Double> observable = vertx.eventBus().
<Double>consumer("heat-sensor").
bodyStream().
toObservable();
observable.
buffer(1, TimeUnit.SECONDS).
map(samples -> samples.
stream().
collect(Collectors.averagingDouble(d -> d))).
subscribe(heat -> {
vertx.eventBus().send("news-feed", "Current heat is " + heat);
});
Reactive Programming 152
Reactive Manifesto 153
Responsive
Message
Driven
Elastic Resilient
Reactive & Distributed
Vert.x Summary
Reactive & Distributed
Event Bus
155
Reactive & Distributed
Event Bus
156
Reactive & Distributed
Event Bus
Server 1 Server 2 Server 3 Server N...
157
Reactive & Distributed
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
158
Reactive & Distributed
Module ModuleModule
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
159
Reactive & Distributed 160
Bridged
Apps
Data
Access
Metrics
External
Apps
IoT
Devices
etc.
Module ModuleModule
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
Reactive & Distributed 161
Bridged
Apps
Data
Access
Metrics
External
Apps
IoT
Devices
etc.
Module ModuleModule
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
• Java
• JavaScript
• Groovy
• Ruby
• Ceylon
• Scala
• Kotlin
Polyglot 162
Bridged
Apps
Data
Access
Metrics
External
Apps
IoT
Devices
etc.
Module ModuleModule
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
• JavaScript
• Event bus integration over SockJS for browser-based & node.js apps.
Polyglot 163
Bridged
Apps
Data
Access
Metrics
External
Apps
IoT
Devices
etc.
Module ModuleModule
Event Bus
Handler Handler Handler Handler Handler Handler
Server 1 Server 2 Server 3 Server N...
Benchmark
Hello World
165Benchmark
20
300 300
3822
2544
3865
19
Benchmark 166
3
13
20
100
300 300
3822
2544
3865
12 12
19
167Benchmark
3
13
20
100
300 300
3822
2544
3865
12 12
19
168Benchmark
3
13
20
100
300 300
3822
2544
3865
12 12
19
169Benchmark
3
13
20
100
300 300
3822
2544
3865
12 12
19
Thank You!
http://orkhan.io
http://fb.com/groups/reactive.distributed

Weitere ähnliche Inhalte

Was ist angesagt?

Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGiDavid Bosschaert
 
Azure Durable Functions (2018-06-13)
Azure Durable Functions (2018-06-13)Azure Durable Functions (2018-06-13)
Azure Durable Functions (2018-06-13)Paco de la Cruz
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadDavid Gómez García
 
Take Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersTake Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersNaresha K
 
Building scalable applications with hazelcast
Building scalable applications with hazelcastBuilding scalable applications with hazelcast
Building scalable applications with hazelcastFuad Malikov
 
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixDavid Bosschaert
 
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018Chris Gillum
 
Wicket Security Presentation
Wicket Security PresentationWicket Security Presentation
Wicket Security Presentationmrmean
 
JavaFX for Business Application Developers
JavaFX for Business Application DevelopersJavaFX for Business Application Developers
JavaFX for Business Application DevelopersMichael Heinrichs
 
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphereAAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphereKevin Sutter
 
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R AugeHTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Augemfrancis
 
Spring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in HeavenSpring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in HeavenJoshua Long
 
Deploying to azure web sites
Deploying to azure web sitesDeploying to azure web sites
Deploying to azure web sitesGiant Penguin
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
Service Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C ZiegelerService Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C Ziegelermfrancis
 
Testing Java Code Effectively
Testing Java Code EffectivelyTesting Java Code Effectively
Testing Java Code EffectivelyAndres Almiray
 
Function as a Service in private cloud
Function as a Service in private cloud Function as a Service in private cloud
Function as a Service in private cloud lightdelay
 
Coldbox developer training – session 5
Coldbox developer training – session 5Coldbox developer training – session 5
Coldbox developer training – session 5Billie Berzinskas
 

Was ist angesagt? (20)

Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
 
Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発
 
Azure Durable Functions (2018-06-13)
Azure Durable Functions (2018-06-13)Azure Durable Functions (2018-06-13)
Azure Durable Functions (2018-06-13)
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
 
Take Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersTake Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainers
 
Building scalable applications with hazelcast
Building scalable applications with hazelcastBuilding scalable applications with hazelcast
Building scalable applications with hazelcast
 
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and FelixProvisioning with OSGi Subsystems and Repository using Apache Aries and Felix
Provisioning with OSGi Subsystems and Repository using Apache Aries and Felix
 
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018
Advanced Durable Functions - Serverless Meetup Tokyo - Feb 2018
 
Wicket Security Presentation
Wicket Security PresentationWicket Security Presentation
Wicket Security Presentation
 
JavaFX for Business Application Developers
JavaFX for Business Application DevelopersJavaFX for Business Application Developers
JavaFX for Business Application Developers
 
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphereAAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
AAI 2236-Using the New Java Concurrency Utilities with IBM WebSphere
 
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R AugeHTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
HTTP Whiteboard - OSGI Compendium 6.0 - How web apps should have been! - R Auge
 
Spring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in HeavenSpring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in Heaven
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
Deploying to azure web sites
Deploying to azure web sitesDeploying to azure web sites
Deploying to azure web sites
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
Service Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C ZiegelerService Oriented Web Development with OSGi - C Ziegeler
Service Oriented Web Development with OSGi - C Ziegeler
 
Testing Java Code Effectively
Testing Java Code EffectivelyTesting Java Code Effectively
Testing Java Code Effectively
 
Function as a Service in private cloud
Function as a Service in private cloud Function as a Service in private cloud
Function as a Service in private cloud
 
Coldbox developer training – session 5
Coldbox developer training – session 5Coldbox developer training – session 5
Coldbox developer training – session 5
 

Ähnlich wie Vert.x - Reactive & Distributed [Devoxx version]

apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...apidays
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....La Cuisine du Web
 
SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8Ben Abdallah Helmi
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSuzquiano
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on AndroidTomáš Kypta
 
Advanced akka features
Advanced akka featuresAdvanced akka features
Advanced akka featuresGrzegorz Duda
 
Futures and Rx Observables: powerful abstractions for consuming web services ...
Futures and Rx Observables: powerful abstractions for consuming web services ...Futures and Rx Observables: powerful abstractions for consuming web services ...
Futures and Rx Observables: powerful abstractions for consuming web services ...Chris Richardson
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...tdc-globalcode
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsBen Hall
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleThierry Wasylczenko
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the wayOleg Podsechin
 
Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuVMware Tanzu
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen ChinHacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chinjaxconf
 
Fun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksFun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksMongoDB
 
Terraform introduction
Terraform introductionTerraform introduction
Terraform introductionJason Vance
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemAndres Almiray
 

Ähnlich wie Vert.x - Reactive & Distributed [Devoxx version] (20)

apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....
BATTLESTAR GALACTICA : Saison 5 - Les Cylons passent dans le cloud avec Vert....
 
SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8SCWCD : Thread safe servlets : CHAP : 8
SCWCD : Thread safe servlets : CHAP : 8
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMS
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Advanced akka features
Advanced akka featuresAdvanced akka features
Advanced akka features
 
Futures and Rx Observables: powerful abstractions for consuming web services ...
Futures and Rx Observables: powerful abstractions for consuming web services ...Futures and Rx Observables: powerful abstractions for consuming web services ...
Futures and Rx Observables: powerful abstractions for consuming web services ...
 
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
 
Building Reactive Microservices with Vert.x
Building Reactive Microservices with Vert.xBuilding Reactive Microservices with Vert.x
Building Reactive Microservices with Vert.x
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js Applications
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
 
Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFu
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen ChinHacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
 
Fun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksFun Teaching MongoDB New Tricks
Fun Teaching MongoDB New Tricks
 
Terraform introduction
Terraform introductionTerraform introduction
Terraform introduction
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
Arquitecturas de microservicios - Medianet Software
Arquitecturas de microservicios   -  Medianet SoftwareArquitecturas de microservicios   -  Medianet Software
Arquitecturas de microservicios - Medianet Software
 

Mehr von Orkhan Gasimov

Complex Application Design
Complex Application DesignComplex Application Design
Complex Application DesignOrkhan Gasimov
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Orkhan Gasimov
 
Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Orkhan Gasimov
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Orkhan Gasimov
 
Angular Web Components
Angular Web ComponentsAngular Web Components
Angular Web ComponentsOrkhan Gasimov
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudOrkhan Gasimov
 
Designing Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesDesigning Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesOrkhan Gasimov
 
Refactoring Monolith to Microservices
Refactoring Monolith to MicroservicesRefactoring Monolith to Microservices
Refactoring Monolith to MicroservicesOrkhan Gasimov
 
Fault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentFault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentOrkhan Gasimov
 
Patterns of Distributed Application Design
Patterns of Distributed Application DesignPatterns of Distributed Application Design
Patterns of Distributed Application DesignOrkhan Gasimov
 
Secured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudSecured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudOrkhan Gasimov
 
Data Microservices with Spring Cloud
Data Microservices with Spring CloudData Microservices with Spring Cloud
Data Microservices with Spring CloudOrkhan Gasimov
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Orkhan Gasimov
 

Mehr von Orkhan Gasimov (14)

Complex Application Design
Complex Application DesignComplex Application Design
Complex Application Design
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
 
Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?Digital Transformation - Why? How? What?
Digital Transformation - Why? How? What?
 
Service Mesh - Why? How? What?
Service Mesh - Why? How? What?Service Mesh - Why? How? What?
Service Mesh - Why? How? What?
 
Angular Web Components
Angular Web ComponentsAngular Web Components
Angular Web Components
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloud
 
Designing Fault Tolerant Microservices
Designing Fault Tolerant MicroservicesDesigning Fault Tolerant Microservices
Designing Fault Tolerant Microservices
 
Refactoring Monolith to Microservices
Refactoring Monolith to MicroservicesRefactoring Monolith to Microservices
Refactoring Monolith to Microservices
 
Fault Tolerance in Distributed Environment
Fault Tolerance in Distributed EnvironmentFault Tolerance in Distributed Environment
Fault Tolerance in Distributed Environment
 
Angular or React
Angular or ReactAngular or React
Angular or React
 
Patterns of Distributed Application Design
Patterns of Distributed Application DesignPatterns of Distributed Application Design
Patterns of Distributed Application Design
 
Secured REST Microservices with Spring Cloud
Secured REST Microservices with Spring CloudSecured REST Microservices with Spring Cloud
Secured REST Microservices with Spring Cloud
 
Data Microservices with Spring Cloud
Data Microservices with Spring CloudData Microservices with Spring Cloud
Data Microservices with Spring Cloud
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?
 

Kürzlich hochgeladen

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 

Kürzlich hochgeladen (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Vert.x - Reactive & Distributed [Devoxx version]

Hinweis der Redaktion

  1. JSON body example
  2. JSON body example