SlideShare a Scribd company logo
Development with Vert.x:
an event-driven application
framework for the JVM
David Wu
@wuman
blog.wu-man.com
Taiwan Java User Group (2013/06/29)
1Monday, July 1, 13
about.me/wuman
2Monday, July 1, 13
What is Vert.x?
3Monday, July 1, 13
What most people will tell you about Vert.x
• A general-purpose application framework
running on JVM
• Performant: asynchronous APIs, event-driven,
non-blocking, etc.
• Highly scalable but also easy to implement
concurrency
• Polyglot: intermix Java, JS, Ruby, Groovy,
Python, etc.
4Monday, July 1, 13
What I think about Vert.x
• All-in-one framework that allows you to focus
on your application rather than fiddling with
different technologies
• Business friendly Apache License 2.0
• Loose coupling modules that interoperate in a
system
5Monday, July 1, 13
Background on the
C10K Problem
6Monday, July 1, 13
Shift from Threading
to Asynchronous
the story of switching from Apache to Node.js
7Monday, July 1, 13
The inevitable comparison to Node.js
• A single event loop serving a high volume of
connections via an asynchronous
programming model
• Most of the real work are done in a pool of
background threads
8Monday, July 1, 13
Asynchronous Programming Model
vertx.createHttpServer().requestHandler(
new Handler<HttpServerRequest>() {
public void handle(HttpServerRequest request) {
log.info("A request has arrived on the server!");
request.response().end();
}
}
).listen(8080, "localhost");
9Monday, July 1, 13
But there are 3
problems with Node.js
10Monday, July 1, 13
Problems with Node.js
• Well, it’s not Java (and this is a Java User
Group)
• Does not easily scale both vertically and
horizontally
• Single event loop fails when you have CPU-
intensive tasks or 3rd-party blocking APIs
11Monday, July 1, 13
Vert.x to the rescue
• Use all available cores on a single machine
• Horizontally scale out to multiple boxes
• Allow blocking calls to NOT run on an event
loop
12Monday, July 1, 13
Introduction to Vert.x instance and Verticles
Verticle
Verticle
WorkerVerticle
WorkerVerticle
Vert.x instance
13Monday, July 1, 13
Verticles are extremely isolated
• Verticles are isolated with separate class
loaders
• A verticle never gets executed by more than
one thread concurrently
• No race conditions, no deadlocks. You write
your code as single threaded.
14Monday, July 1, 13
What about
communication?
15Monday, July 1, 13
Message Passing via the Event Bus
Verticle
Verticle
Worker
Verticle
Worker
Verticle
Vert.x instance
16Monday, July 1, 13
Very Powerful Event Bus
Verticle
Verticle
WorkerVerticle
Verticle
Verticle
WorkerVerticle
17Monday, July 1, 13
Registering a Message Handler
EventBus eb = vertx.eventBus();
Handler<Message> myHandler = new Handler<Message>() {
public void handle(Message message) {
System.out.println("I received a message " + message.body);
}
};
eb.registerHandler("test.address", myHandler);
18Monday, July 1, 13
Message Types
• Primitives and their boxed types
• String
• org.vertx.java.core.json.JsonObject
• org.vertx.java.core.json.JsonArray
• org.vertx.java.core.buffer.Buffer
19Monday, July 1, 13
Pub/Sub Model
eb.publish("test.address", "hello world");
20Monday, July 1, 13
Point-to-Point Model
eb.send("test.address", "This is a message",
new Handler<Message<String>>() {
public void handle(Message<String> message) {
System.out.println("I received a reply " + message.body);
}
});
EventBus eb = vertx.eventBus();
Handler<Message> myHandler = new Handler<Message>() {
public void handle(Message message) {
System.out.println("I received a message " + message.body);
message.reply("This is a reply");
}
};
eb.registerHandler("test.address", myHandler);
21Monday, July 1, 13
Shared Maps and Sets
ConcurrentMap<String, Integer> map = vertx.sharedData().getMap("demo.mymap");
map.put("some-key", 123);
Set<String> set = vertx.sharedData().getSet("demo.myset");
set.add("some-value");
22Monday, July 1, 13
Module System
23Monday, July 1, 13
Writing Verticles
import org.vertx.java.core.Handler;
import org.vertx.java.core.net.NetSocket;
import org.vertx.java.core.streams.Pump;
import org.vertx.java.platform.Verticle;
public class Server extends Verticle {
public void start() {
vertx.createNetServer().connectHandler(new Handler<NetSocket>() {
public void handle(final NetSocket socket) {
Pump.createPump(socket, socket).start();
}
}).listen(1234);
}
}
vertx run Server.java
24Monday, July 1, 13
Deploying Verticles programmatically
// For example - deploy some other verticle
container.deployVerticle("foo.js", new AsyncResultHandler<String>() {
public void handle(AsyncResult<String> deployResult) {
if (deployResult.succeeded()) {
System.out.println(“Yay!”);
} else {
System.out.println(“Error: “ + deployResult.cause());
}
}
});
25Monday, July 1, 13
Modules
• Package verticles into re-usable modules
• Simply a zip file containing module definition,
code, and resources
• Very similar to the module system in Node.js
• Modules can be “zip” artifacts released in
Maven Central
• Vert.x web site maintains a listing of Vert.x
modules
26Monday, July 1, 13
Example Modules
• JDBC, Redis, MongoDB Persistors
• AMQP
• Mailer
• Persistent work queue
• Authentication Manager
• Session Manager
• Web framework
• Language implementations
27Monday, July 1, 13
Programming
Experience
28Monday, July 1, 13
Core APIs
• TCP/SSL servers
and clients
• HTTP/HTTPS
servers and clients
• WebSockets
servers and clients
• SockJS
• EventBus
• Shared Maps and
Sets
• Buffers
• Flow control
• Timers
• Files
• Configuration
29Monday, July 1, 13
Container API
• Deploying and undeploying verticles
• Deploying and undeploying modules
• Logging
• Retrieve verticle configuration
30Monday, July 1, 13
Easy development
• Gradle template
• Maven archetype and plugin
• IDE debugging and testing
31Monday, July 1, 13
What is it good for?
32Monday, July 1, 13
Applications
• Realtime analytics dashboard
• Big data queries and task coordination
• Polyglot integration
33Monday, July 1, 13
Some Pain Points
34Monday, July 1, 13
Real life caveats
• Content assist in IDEs don’t work for busmod APIs
• You often find yourself tracing errors in the busmods,
which can be difficult because the stack trace stops
at message passing
• People writing in other languages often get frustrated
by not being able to use native extensions that they
are already used to.
• Hell of anonymous inner class callbacks and no good
Java flow control libraries
• Java7 only. Doesn’t work on Android.
35Monday, July 1, 13
Conclusion
36Monday, July 1, 13
37Monday, July 1, 13
“Using a bleeding-edge
framework is exciting at first.
Not so much afterwards.”
David Wu
37Monday, July 1, 13
Make it better.
Contribute.
http://vert-x.github.io/
38Monday, July 1, 13
Thank you
39Monday, July 1, 13
Q & A
40Monday, July 1, 13

More Related Content

PPTX
Real World Enterprise Reactive Programming using Vert.x
PDF
Vert.x introduction
PPTX
Reactive applications and microservices with Vert.x tool-kit
PDF
Vert.x
PPTX
vert.x - asynchronous event-driven web applications on the JVM
PPTX
Vert.x devoxx london 2013
ODP
Groovy & Grails eXchange 2012 vert.x presentation
ODP
Vert.x keynote for EclipseCon 2013
Real World Enterprise Reactive Programming using Vert.x
Vert.x introduction
Reactive applications and microservices with Vert.x tool-kit
Vert.x
vert.x - asynchronous event-driven web applications on the JVM
Vert.x devoxx london 2013
Groovy & Grails eXchange 2012 vert.x presentation
Vert.x keynote for EclipseCon 2013

What's hot (20)

PPT
JUDCon Brazil 2013 - Vert.x an introduction
PDF
An Introduction to the Vert.x framework
PPTX
Event driven microservices with vertx and kubernetes
PDF
vert.x - life beyond jetty and apache
PPTX
Vert.x vs akka
PPTX
Production ready Vert.x
PDF
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
PDF
Reactor grails realtime web devoxx 2013
PPTX
Vertx in production
PDF
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
PDF
Node.js, toy or power tool?
PDF
Running JavaScript Efficiently in a Java World
PDF
Introduction to node js - From "hello world" to deploying on azure
PDF
Modern app programming with RxJava and Eclipse Vert.x
PDF
Building Reactive Microservices with Vert.x
PDF
Nuxeo World Session: Scaling Nuxeo Applications
KEY
Introducing Apricot, The Eclipse Content Management Platform
KEY
OSCON 2011 - Node.js Tutorial
PDF
Vagrant-Binding JUG Dortmund
JUDCon Brazil 2013 - Vert.x an introduction
An Introduction to the Vert.x framework
Event driven microservices with vertx and kubernetes
vert.x - life beyond jetty and apache
Vert.x vs akka
Production ready Vert.x
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Reactor grails realtime web devoxx 2013
Vertx in production
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
Node.js, toy or power tool?
Running JavaScript Efficiently in a Java World
Introduction to node js - From "hello world" to deploying on azure
Modern app programming with RxJava and Eclipse Vert.x
Building Reactive Microservices with Vert.x
Nuxeo World Session: Scaling Nuxeo Applications
Introducing Apricot, The Eclipse Content Management Platform
OSCON 2011 - Node.js Tutorial
Vagrant-Binding JUG Dortmund
Ad

Viewers also liked (20)

PPTX
Vert.x v3 - high performance polyglot application toolkit
PDF
Reactive Distributed Applications with Vert.x
PPTX
ADF in Action - getting (re)acquainted with Oracle’s premier application deve...
ODP
Build your reactive web application with Vert.x
PPTX
Data Caching Strategies for Oracle Mobile Application Framework
PDF
Mech project list
PDF
Gws 20131018 vertx_handson(updated)
PPTX
Real World Enterprise Reactive Programming using Vert.x
PDF
PDF
Case study - Nuskin: Statefull Applications in a Stateless World
PDF
Vert.x 3
PDF
Futures and Rx Observables: powerful abstractions for consuming web services ...
PDF
Apache mahout - introduction
PDF
Managing computational resources with Apache Mesos
PDF
An introduction to predictionIO
PDF
PC = Personal Cloud (or how to use your development machine with Vagrant and ...
PDF
Introduction to CFEngine
Vert.x v3 - high performance polyglot application toolkit
Reactive Distributed Applications with Vert.x
ADF in Action - getting (re)acquainted with Oracle’s premier application deve...
Build your reactive web application with Vert.x
Data Caching Strategies for Oracle Mobile Application Framework
Mech project list
Gws 20131018 vertx_handson(updated)
Real World Enterprise Reactive Programming using Vert.x
Case study - Nuskin: Statefull Applications in a Stateless World
Vert.x 3
Futures and Rx Observables: powerful abstractions for consuming web services ...
Apache mahout - introduction
Managing computational resources with Apache Mesos
An introduction to predictionIO
PC = Personal Cloud (or how to use your development machine with Vagrant and ...
Introduction to CFEngine
Ad

Similar to Development with Vert.x: an event-driven application framework for the JVM (20)

PDF
Vert.x - 2014 JDay Lviv (English)
PPTX
Vert.x Event Driven Non Blocking Reactive Toolkit
PDF
BASICS OF VERT.X - A toolkit for building asynchronous and reactive app
PDF
Apps software development with Vert.X
PDF
Vertx Basics
PPTX
PDF
Vert.x - Tehran JUG meeting Aug-2014 - Saeed Zarinfam
PDF
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
PPTX
Vert.x for Microservices Architecture
PDF
Vert.x - JDD 2013 (English)
PDF
Vertx In Action Asynchronous And Reactive Java Julien Ponge
PPTX
Building microservices with vert.x 3.0
PPTX
Vertx – reactive toolkit
PDF
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
PPTX
Event driven systems
PDF
Utrecht JUG - Building microservices with Vert.x
PPTX
Getting groovier-with-vertx
PDF
Vert.x - Dessì
PDF
Codemotion Amsterdam 2016 - Building microservices with Vert.x
PDF
Building microservices with Vert.x - Bert Jan Schrijver - Codemotion Amsterda...
Vert.x - 2014 JDay Lviv (English)
Vert.x Event Driven Non Blocking Reactive Toolkit
BASICS OF VERT.X - A toolkit for building asynchronous and reactive app
Apps software development with Vert.X
Vertx Basics
Vert.x - Tehran JUG meeting Aug-2014 - Saeed Zarinfam
Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive app...
Vert.x for Microservices Architecture
Vert.x - JDD 2013 (English)
Vertx In Action Asynchronous And Reactive Java Julien Ponge
Building microservices with vert.x 3.0
Vertx – reactive toolkit
TDC2017 | São Paulo - Trilha Java EE How we figured out we had a SRE team at ...
Event driven systems
Utrecht JUG - Building microservices with Vert.x
Getting groovier-with-vertx
Vert.x - Dessì
Codemotion Amsterdam 2016 - Building microservices with Vert.x
Building microservices with Vert.x - Bert Jan Schrijver - Codemotion Amsterda...

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
cuic standard and advanced reporting.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
KodekX | Application Modernization Development
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Approach and Philosophy of On baking technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPT
Teaching material agriculture food technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Encapsulation_ Review paper, used for researhc scholars
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Mobile App Security Testing_ A Comprehensive Guide.pdf
Review of recent advances in non-invasive hemoglobin estimation
Big Data Technologies - Introduction.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Unlocking AI with Model Context Protocol (MCP)
cuic standard and advanced reporting.pdf
Chapter 3 Spatial Domain Image Processing.pdf
KodekX | Application Modernization Development
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Approach and Philosophy of On baking technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Teaching material agriculture food technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Development with Vert.x: an event-driven application framework for the JVM

  • 1. Development with Vert.x: an event-driven application framework for the JVM David Wu @wuman blog.wu-man.com Taiwan Java User Group (2013/06/29) 1Monday, July 1, 13
  • 4. What most people will tell you about Vert.x • A general-purpose application framework running on JVM • Performant: asynchronous APIs, event-driven, non-blocking, etc. • Highly scalable but also easy to implement concurrency • Polyglot: intermix Java, JS, Ruby, Groovy, Python, etc. 4Monday, July 1, 13
  • 5. What I think about Vert.x • All-in-one framework that allows you to focus on your application rather than fiddling with different technologies • Business friendly Apache License 2.0 • Loose coupling modules that interoperate in a system 5Monday, July 1, 13
  • 6. Background on the C10K Problem 6Monday, July 1, 13
  • 7. Shift from Threading to Asynchronous the story of switching from Apache to Node.js 7Monday, July 1, 13
  • 8. The inevitable comparison to Node.js • A single event loop serving a high volume of connections via an asynchronous programming model • Most of the real work are done in a pool of background threads 8Monday, July 1, 13
  • 9. Asynchronous Programming Model vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { public void handle(HttpServerRequest request) { log.info("A request has arrived on the server!"); request.response().end(); } } ).listen(8080, "localhost"); 9Monday, July 1, 13
  • 10. But there are 3 problems with Node.js 10Monday, July 1, 13
  • 11. Problems with Node.js • Well, it’s not Java (and this is a Java User Group) • Does not easily scale both vertically and horizontally • Single event loop fails when you have CPU- intensive tasks or 3rd-party blocking APIs 11Monday, July 1, 13
  • 12. Vert.x to the rescue • Use all available cores on a single machine • Horizontally scale out to multiple boxes • Allow blocking calls to NOT run on an event loop 12Monday, July 1, 13
  • 13. Introduction to Vert.x instance and Verticles Verticle Verticle WorkerVerticle WorkerVerticle Vert.x instance 13Monday, July 1, 13
  • 14. Verticles are extremely isolated • Verticles are isolated with separate class loaders • A verticle never gets executed by more than one thread concurrently • No race conditions, no deadlocks. You write your code as single threaded. 14Monday, July 1, 13
  • 16. Message Passing via the Event Bus Verticle Verticle Worker Verticle Worker Verticle Vert.x instance 16Monday, July 1, 13
  • 17. Very Powerful Event Bus Verticle Verticle WorkerVerticle Verticle Verticle WorkerVerticle 17Monday, July 1, 13
  • 18. Registering a Message Handler EventBus eb = vertx.eventBus(); Handler<Message> myHandler = new Handler<Message>() { public void handle(Message message) { System.out.println("I received a message " + message.body); } }; eb.registerHandler("test.address", myHandler); 18Monday, July 1, 13
  • 19. Message Types • Primitives and their boxed types • String • org.vertx.java.core.json.JsonObject • org.vertx.java.core.json.JsonArray • org.vertx.java.core.buffer.Buffer 19Monday, July 1, 13
  • 20. Pub/Sub Model eb.publish("test.address", "hello world"); 20Monday, July 1, 13
  • 21. Point-to-Point Model eb.send("test.address", "This is a message", new Handler<Message<String>>() { public void handle(Message<String> message) { System.out.println("I received a reply " + message.body); } }); EventBus eb = vertx.eventBus(); Handler<Message> myHandler = new Handler<Message>() { public void handle(Message message) { System.out.println("I received a message " + message.body); message.reply("This is a reply"); } }; eb.registerHandler("test.address", myHandler); 21Monday, July 1, 13
  • 22. Shared Maps and Sets ConcurrentMap<String, Integer> map = vertx.sharedData().getMap("demo.mymap"); map.put("some-key", 123); Set<String> set = vertx.sharedData().getSet("demo.myset"); set.add("some-value"); 22Monday, July 1, 13
  • 24. Writing Verticles import org.vertx.java.core.Handler; import org.vertx.java.core.net.NetSocket; import org.vertx.java.core.streams.Pump; import org.vertx.java.platform.Verticle; public class Server extends Verticle { public void start() { vertx.createNetServer().connectHandler(new Handler<NetSocket>() { public void handle(final NetSocket socket) { Pump.createPump(socket, socket).start(); } }).listen(1234); } } vertx run Server.java 24Monday, July 1, 13
  • 25. Deploying Verticles programmatically // For example - deploy some other verticle container.deployVerticle("foo.js", new AsyncResultHandler<String>() { public void handle(AsyncResult<String> deployResult) { if (deployResult.succeeded()) { System.out.println(“Yay!”); } else { System.out.println(“Error: “ + deployResult.cause()); } } }); 25Monday, July 1, 13
  • 26. Modules • Package verticles into re-usable modules • Simply a zip file containing module definition, code, and resources • Very similar to the module system in Node.js • Modules can be “zip” artifacts released in Maven Central • Vert.x web site maintains a listing of Vert.x modules 26Monday, July 1, 13
  • 27. Example Modules • JDBC, Redis, MongoDB Persistors • AMQP • Mailer • Persistent work queue • Authentication Manager • Session Manager • Web framework • Language implementations 27Monday, July 1, 13
  • 29. Core APIs • TCP/SSL servers and clients • HTTP/HTTPS servers and clients • WebSockets servers and clients • SockJS • EventBus • Shared Maps and Sets • Buffers • Flow control • Timers • Files • Configuration 29Monday, July 1, 13
  • 30. Container API • Deploying and undeploying verticles • Deploying and undeploying modules • Logging • Retrieve verticle configuration 30Monday, July 1, 13
  • 31. Easy development • Gradle template • Maven archetype and plugin • IDE debugging and testing 31Monday, July 1, 13
  • 32. What is it good for? 32Monday, July 1, 13
  • 33. Applications • Realtime analytics dashboard • Big data queries and task coordination • Polyglot integration 33Monday, July 1, 13
  • 35. Real life caveats • Content assist in IDEs don’t work for busmod APIs • You often find yourself tracing errors in the busmods, which can be difficult because the stack trace stops at message passing • People writing in other languages often get frustrated by not being able to use native extensions that they are already used to. • Hell of anonymous inner class callbacks and no good Java flow control libraries • Java7 only. Doesn’t work on Android. 35Monday, July 1, 13
  • 38. “Using a bleeding-edge framework is exciting at first. Not so much afterwards.” David Wu 37Monday, July 1, 13
  • 41. Q & A 40Monday, July 1, 13