SlideShare a Scribd company logo
1 of 60
Download to read offline
vert.x
                         Polyglot and Scalable Apps on the JVM


                              Álvaro Videla | VMware

Tuesday, October 9, 12
About Me
                     •   Developer Advocate for Cloud Foundry

                     •   Blog: http://videlalvaro.github.com/

                     •   Twitter: @old_sound




Tuesday, October 9, 12
About Me
                     •   Developer Advocate for Cloud Foundry

                     •   Blog: http://videlalvaro.github.com/

                     •   Twitter: @old_sound

                     •   I created gifsockets™




Tuesday, October 9, 12
About Me
                         Co-authored

                RabbitMQ in Action
               http://bit.ly/rabbitmq




Tuesday, October 9, 12
vert.x
Tuesday, October 9, 12
vert.x

                     • VMware sponsored OS project




Tuesday, October 9, 12
vert.x

                     • VMware sponsored OS project
                     • JVM Based




Tuesday, October 9, 12
vert.x

                     • VMware sponsored OS project
                     • JVM Based
                     • 1+ year



Tuesday, October 9, 12
vert.x

                     • VMware sponsored OS project
                     • JVM Based
                     • 1+ year
                     • By @timfox from HornetMQ fame


Tuesday, October 9, 12
vert.x

                          Framework to write
                                 polyglot,
                         highly concurrent apps.



Tuesday, October 9, 12
vert.x

                          Framework to write
                                polyglot,
                         highly concurrent apps.



Tuesday, October 9, 12
Javascript
             load('vertx.js')

             vertx.createHttpServer().requestHandler(function(req) {
                 var file = req.path === '/' ? 'index.html' : req.path;
                 req.response.sendFile('webroot/' + file);
             }).listen(8080)




Tuesday, October 9, 12
Javascript
             load('vertx.js')

             vertx.createHttpServer().requestHandler(function(req) {
                 var file = req.path === '/' ? 'index.html' : req.path;
                 req.response.sendFile('webroot/' + file);
             }).listen(8080)


                 $ vertx run server.js




Tuesday, October 9, 12
Javascript
             load('vertx.js')

             vertx.createHttpServer().requestHandler(function(req) {
                 var file = req.path === '/' ? 'index.html' : req.path;
                 req.response.sendFile('webroot/' + file);
             }).listen(8080)


                 $ vertx run server.js -instances 32




Tuesday, October 9, 12
Ruby
             require "vertx"

             Vertx::HttpServer.new.request_handler do |req|
                 file = req.uri == "/" ? "index.html" : req.uri
                 req.response.send_file "webroot/#{file}"
             end.listen(8080)



                 $ vertx run server.rb -instances 32




Tuesday, October 9, 12
Python
             import vertx

             server = vertx.create_http_server()

             @server.request_handler
             def request_handler(req):
                 file = "index.html" if req.uri == "/" else req.uri
                 req.response.send_file("webroot/%s"%file)
             server.listen(8080)


                $ vertx run server.py -instances 32




Tuesday, October 9, 12
Groovy

             vertx.createHttpServer().requestHandler { req ->
                 def file = req.uri == "/" ? "index.html" : req.uri
                 req.response.sendFile "webroot/$file"
             }.listen(8080)




                $ vertx run Server.groovy -instances 32




Tuesday, October 9, 12
Java
                import org.vertx.java.core.Handler;
                import org.vertx.java.core.http.HttpServerRequest;
                import org.vertx.java.deploy.Verticle;

                public class Server extends Verticle {
                    public void start() {
                        vertx.createHttpServer().requestHandler(new
                Handler<HttpServerRequest>() {
                            public void handle(HttpServerRequest req) {
                                String file = req.path.equals("/") ? "index.html" :
                req.path;
                                req.response.sendFile("webroot/" + file);
                            }
                        }).listen(8080);
                    }
                }


                 $ vertx run Server.java -instances 32



Tuesday, October 9, 12
vert.x
                          Framework to write
                               polyglot,
                         highly concurrent
                                apps.



Tuesday, October 9, 12
Core Concepts



Tuesday, October 9, 12
Core Concepts

                     • Verticle




Tuesday, October 9, 12
Core Concepts

                     • Verticle
                     • vert.x instances




Tuesday, October 9, 12
Core Concepts

                     • Verticle
                     • vert.x instances
                     • Event Bus



Tuesday, October 9, 12
Verticles run inside a
                             vert.x instance.
                         A single vert.x instance
                            runs inside its own
                              JVM instance.


Tuesday, October 9, 12
Tuesday, October 9, 12
vertx run server.js -instances 32




Tuesday, October 9, 12
Programming Model
                     • Event Based (similar to node.js)
                     • Event Handlers
                     • Small set of threads per vert.x instance
                     • Verticles are executed using the same
                         thread.
                     • Message Passing Communication

Tuesday, October 9, 12
vert.x core



Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers




Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers

                     •   HTTP/HTTPS Servers




Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers

                     •   HTTP/HTTPS Servers

                     •   Websockets and Sock.js




Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers

                     •   HTTP/HTTPS Servers

                     •   Websockets and Sock.js

                     •   Distributed Event Bus Access




Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers

                     •   HTTP/HTTPS Servers

                     •   Websockets and Sock.js

                     •   Distributed Event Bus Access

                     •   Shared Maps and Sets




Tuesday, October 9, 12
vert.x core
                     •   TCP/SSL Servers

                     •   HTTP/HTTPS Servers

                     •   Websockets and Sock.js

                     •   Distributed Event Bus Access

                     •   Shared Maps and Sets

                     •   Logging



Tuesday, October 9, 12
Event Bus



Tuesday, October 9, 12
Event Bus
                     •   Allows Verticles to talk to each other




Tuesday, October 9, 12
Event Bus
                     •   Allows Verticles to talk to each other

                     •   Works cross language




Tuesday, October 9, 12
Event Bus
                     •   Allows Verticles to talk to each other

                     •   Works cross language

                     •   Works across the cluster




Tuesday, October 9, 12
Event Bus
                     •   Allows Verticles to talk to each other

                     •   Works cross language

                     •   Works across the cluster

                     •   Spans from server to client side




Tuesday, October 9, 12
Event Bus - How
                     •   Register Handlers




Tuesday, October 9, 12
Event Bus - How
                     •   Register Handlers

                     •   Unregister Handlers




Tuesday, October 9, 12
Event Bus - How
                     •   Register Handlers

                     •   Unregister Handlers

                     •   Addresses




Tuesday, October 9, 12
Event Bus - How
                     •   Register Handlers

                     •   Unregister Handlers

                     •   Addresses

                     •   Messages (Transient)




Tuesday, October 9, 12
Register Handler

                         var eb = vertx.eventBus;

                         var myHandler = function(message)) {
                           log.info('I received a message ' + message);
                         }

                         eb.registerHandler('test.address', myHandler);




Tuesday, October 9, 12
Register Handler

                         var eb = vertx.eventBus;

                         var myHandler = function(message)) {
                           log.info('I received a message ' + message);
                         }

                         eb.registerHandler('test.address', myHandler);

                         eb.unregisterHandler('test.address', myHandler);




Tuesday, October 9, 12
Publish Subscribe

       eb.publish('test.address', 'hello world');




Tuesday, October 9, 12
Point to Point

       eb.send('test.address', 'hello world');




Tuesday, October 9, 12
RPC Server
                         var myHandler = function(message, replier) {
                           log.info('I received a message ' + message);

                             // Do some stuff

                             // Now reply to it

                             replier('This is a reply');
                         }

                         eb.registerHandler('test.address', myHandler);




Tuesday, October 9, 12
RPC Client

         eb.send('test.address', 'This is a message', function(reply) {
             log.info('I received a reply ' + reply);
         });




Tuesday, October 9, 12
Shared Data

                     •   Shared Maps




Tuesday, October 9, 12
Shared Data

                     •   Shared Maps

                     •   Shared Sets




Tuesday, October 9, 12
Shared Set Example
    load('vertx.js')

    var	
  conns	
  =	
  vertx.getSet('conns')

    var	
  server	
  =	
  vertx.createNetServer().connectHandler(function(socket)	
  {
    	
  	
  conns.add(socket.writeHandlerID)
    	
  	
  socket.dataHandler(function(data)	
  {
    	
  	
  	
  	
  var	
  aconns	
  =	
  conns.toArray();
    	
  	
  	
  	
  for	
  (var	
  i	
  =	
  0;	
  i	
  <	
  aconns.length;	
  i++)	
  {
    	
  	
  	
  	
  	
  	
  vertx.eventBus.send(aconns[i],	
  data)
    	
  	
  	
  	
  }
    	
  	
  });
    	
  	
  socket.closedHandler(function()	
  {	
  conns.remove(	
  socket.writeHandlerID)	
  });
    }).listen(1234)




Tuesday, October 9, 12
Benchmarks



Tuesday, October 9, 12
Benchmarks I




           http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/


Tuesday, October 9, 12
Benchmarks II




           http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/


Tuesday, October 9, 12
Internals



Tuesday, October 9, 12
Internals
                     • Netty for network IO
                     • JRuby for the Ruby Engine
                     • Groovy
                     • Mozilla Rhino for JS
                     • Jython for Python support
                     • Hazelcast for clustering
Tuesday, October 9, 12
http://vertx.io/

Tuesday, October 9, 12
Questions?



Tuesday, October 9, 12
Thanks!
                             http://twitter.com/old_sound
                            https://github.com/videlalvaro/
                         http://www.slideshare.net/old_sound



Tuesday, October 9, 12

More Related Content

What's hot

Apache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision TreeApache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision TreeSlim Baltagi
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TShapeBlue
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
 
19 08-22 introduction to activeMQ
19 08-22 introduction to activeMQ19 08-22 introduction to activeMQ
19 08-22 introduction to activeMQWoo Young Choi
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Jean-Paul Azar
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack ArchitectureMirantis
 
Re:invent 2016 Container Scheduling, Execution and AWS Integration
Re:invent 2016 Container Scheduling, Execution and AWS IntegrationRe:invent 2016 Container Scheduling, Execution and AWS Integration
Re:invent 2016 Container Scheduling, Execution and AWS Integrationaspyker
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency GotchasAlex Miller
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudEberhard Wolff
 
Virtualization concept slideshare
Virtualization concept slideshareVirtualization concept slideshare
Virtualization concept slideshareYogesh Kumar
 
Kubernetes Architecture
 Kubernetes Architecture Kubernetes Architecture
Kubernetes ArchitectureKnoldus Inc.
 
Using CloudStack With Clustered LVM
Using CloudStack With Clustered LVMUsing CloudStack With Clustered LVM
Using CloudStack With Clustered LVMMarcus L Sorensen
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요Jo Hoon
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Hitesh-Java
 

What's hot (20)

Apache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision TreeApache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
Apache Kafka vs RabbitMQ: Fit For Purpose / Decision Tree
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
19 08-22 introduction to activeMQ
19 08-22 introduction to activeMQ19 08-22 introduction to activeMQ
19 08-22 introduction to activeMQ
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
Re:invent 2016 Container Scheduling, Execution and AWS Integration
Re:invent 2016 Container Scheduling, Execution and AWS IntegrationRe:invent 2016 Container Scheduling, Execution and AWS Integration
Re:invent 2016 Container Scheduling, Execution and AWS Integration
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
 
Virtualization concept slideshare
Virtualization concept slideshareVirtualization concept slideshare
Virtualization concept slideshare
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Kubernetes Architecture
 Kubernetes Architecture Kubernetes Architecture
Kubernetes Architecture
 
Using CloudStack With Clustered LVM
Using CloudStack With Clustered LVMUsing CloudStack With Clustered LVM
Using CloudStack With Clustered LVM
 
CloudStack Networking
CloudStack NetworkingCloudStack Networking
CloudStack Networking
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans
 
Jenkins
JenkinsJenkins
Jenkins
 
Service mesh
Service meshService mesh
Service mesh
 

Similar to Vertx

Is OSGi modularity always worth it?
Is OSGi modularity always worth it?Is OSGi modularity always worth it?
Is OSGi modularity always worth it?glynnormington
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevFelix Geisendörfer
 
Building A Scalable Open Source Storage Solution
Building A Scalable Open Source Storage SolutionBuilding A Scalable Open Source Storage Solution
Building A Scalable Open Source Storage SolutionPhil Cryer
 
How we scale DroneCi on demand
How we scale DroneCi on demandHow we scale DroneCi on demand
How we scale DroneCi on demandPatrick Jahns
 
Realtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsRealtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsTom Sheffler
 
Vert.x based microservices with vxms
Vert.x based microservices with vxmsVert.x based microservices with vxms
Vert.x based microservices with vxmsAndy Moncsek
 
Chris Ward - Understanding databases for distributed docker applications - No...
Chris Ward - Understanding databases for distributed docker applications - No...Chris Ward - Understanding databases for distributed docker applications - No...
Chris Ward - Understanding databases for distributed docker applications - No...NoSQLmatters
 
Node.js, toy or power tool?
Node.js, toy or power tool?Node.js, toy or power tool?
Node.js, toy or power tool?Ovidiu Dimulescu
 
Aprovisionamiento multi-proveedor con Terraform - Plain Concepts DevOps day
Aprovisionamiento multi-proveedor con Terraform  - Plain Concepts DevOps dayAprovisionamiento multi-proveedor con Terraform  - Plain Concepts DevOps day
Aprovisionamiento multi-proveedor con Terraform - Plain Concepts DevOps dayPlain Concepts
 
Node.js - A practical introduction (v2)
Node.js  - A practical introduction (v2)Node.js  - A practical introduction (v2)
Node.js - A practical introduction (v2)Felix Geisendörfer
 
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016Zabbix
 
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...NETWAYS
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationStuart (Pid) Williams
 
Hammock, a Good Place to Rest
Hammock, a Good Place to RestHammock, a Good Place to Rest
Hammock, a Good Place to RestStratoscale
 
Declarative & workflow based infrastructure with Terraform
Declarative & workflow based infrastructure with TerraformDeclarative & workflow based infrastructure with Terraform
Declarative & workflow based infrastructure with TerraformRadek Simko
 
Docker 1.9 Feature Overview
Docker 1.9 Feature OverviewDocker 1.9 Feature Overview
Docker 1.9 Feature OverviewSreenivas Makam
 
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Docker-Hanoi @DKT , Presentation about Docker EcosystemDocker-Hanoi @DKT , Presentation about Docker Ecosystem
Docker-Hanoi @DKT , Presentation about Docker EcosystemVan Phuc
 
Taking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and PuppetTaking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and PuppetPuppet
 

Similar to Vertx (20)

Is OSGi modularity always worth it?
Is OSGi modularity always worth it?Is OSGi modularity always worth it?
Is OSGi modularity always worth it?
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredev
 
Building A Scalable Open Source Storage Solution
Building A Scalable Open Source Storage SolutionBuilding A Scalable Open Source Storage Solution
Building A Scalable Open Source Storage Solution
 
How we scale DroneCi on demand
How we scale DroneCi on demandHow we scale DroneCi on demand
How we scale DroneCi on demand
 
Realtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn WebsocketsRealtime Streaming using Autobahn Websockets
Realtime Streaming using Autobahn Websockets
 
Vert.x based microservices with vxms
Vert.x based microservices with vxmsVert.x based microservices with vxms
Vert.x based microservices with vxms
 
Chris Ward - Understanding databases for distributed docker applications - No...
Chris Ward - Understanding databases for distributed docker applications - No...Chris Ward - Understanding databases for distributed docker applications - No...
Chris Ward - Understanding databases for distributed docker applications - No...
 
Node.js, toy or power tool?
Node.js, toy or power tool?Node.js, toy or power tool?
Node.js, toy or power tool?
 
Aprovisionamiento multi-proveedor con Terraform - Plain Concepts DevOps day
Aprovisionamiento multi-proveedor con Terraform  - Plain Concepts DevOps dayAprovisionamiento multi-proveedor con Terraform  - Plain Concepts DevOps day
Aprovisionamiento multi-proveedor con Terraform - Plain Concepts DevOps day
 
Node.js - A practical introduction (v2)
Node.js  - A practical introduction (v2)Node.js  - A practical introduction (v2)
Node.js - A practical introduction (v2)
 
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
 
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...
OSDC 2015: Mitchell Hashimoto | Automating the Modern Datacenter, Development...
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentation
 
Hammock, a Good Place to Rest
Hammock, a Good Place to RestHammock, a Good Place to Rest
Hammock, a Good Place to Rest
 
TIAD : Automating the modern datacenter
TIAD : Automating the modern datacenterTIAD : Automating the modern datacenter
TIAD : Automating the modern datacenter
 
XQuery Design Patterns
XQuery Design PatternsXQuery Design Patterns
XQuery Design Patterns
 
Declarative & workflow based infrastructure with Terraform
Declarative & workflow based infrastructure with TerraformDeclarative & workflow based infrastructure with Terraform
Declarative & workflow based infrastructure with Terraform
 
Docker 1.9 Feature Overview
Docker 1.9 Feature OverviewDocker 1.9 Feature Overview
Docker 1.9 Feature Overview
 
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
Docker-Hanoi @DKT , Presentation about Docker EcosystemDocker-Hanoi @DKT , Presentation about Docker Ecosystem
Docker-Hanoi @DKT , Presentation about Docker Ecosystem
 
Taking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and PuppetTaking Control of Chaos with Docker and Puppet
Taking Control of Chaos with Docker and Puppet
 

More from Alvaro Videla

Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQAlvaro Videla
 
Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationData Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationAlvaro Videla
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfAlvaro Videla
 
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ   at SunshinePHPScaling applications with RabbitMQ   at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHPAlvaro Videla
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveAlvaro Videla
 
RabbitMQ Data Ingestion
RabbitMQ Data IngestionRabbitMQ Data Ingestion
RabbitMQ Data IngestionAlvaro Videla
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureAlvaro Videla
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsAlvaro Videla
 
Writing testable code
Writing testable codeWriting testable code
Writing testable codeAlvaro Videla
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot SystemAlvaro Videla
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampAlvaro Videla
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryAlvaro Videla
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De TestearAlvaro Videla
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicacionesAlvaro Videla
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfonyAlvaro Videla
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteScaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteAlvaro Videla
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconAlvaro Videla
 

More from Alvaro Videla (20)

Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
 
Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationData Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring Integration
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
 
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ   at SunshinePHPScaling applications with RabbitMQ   at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHP
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
 
RabbitMQ Data Ingestion
RabbitMQ Data IngestionRabbitMQ Data Ingestion
RabbitMQ Data Ingestion
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
 
Writing testable code
Writing testable codeWriting testable code
Writing testable code
 
RabbitMQ Hands On
RabbitMQ Hands OnRabbitMQ Hands On
RabbitMQ Hands On
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
 
Taming the rabbit
Taming the rabbitTaming the rabbit
Taming the rabbit
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicaciones
 
Messaging patterns
Messaging patternsMessaging patterns
Messaging patterns
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteScaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendcon
 

Recently uploaded

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
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
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 

Recently uploaded (20)

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
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
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 

Vertx

  • 1. vert.x Polyglot and Scalable Apps on the JVM Álvaro Videla | VMware Tuesday, October 9, 12
  • 2. About Me • Developer Advocate for Cloud Foundry • Blog: http://videlalvaro.github.com/ • Twitter: @old_sound Tuesday, October 9, 12
  • 3. About Me • Developer Advocate for Cloud Foundry • Blog: http://videlalvaro.github.com/ • Twitter: @old_sound • I created gifsockets™ Tuesday, October 9, 12
  • 4. About Me Co-authored RabbitMQ in Action http://bit.ly/rabbitmq Tuesday, October 9, 12
  • 6. vert.x • VMware sponsored OS project Tuesday, October 9, 12
  • 7. vert.x • VMware sponsored OS project • JVM Based Tuesday, October 9, 12
  • 8. vert.x • VMware sponsored OS project • JVM Based • 1+ year Tuesday, October 9, 12
  • 9. vert.x • VMware sponsored OS project • JVM Based • 1+ year • By @timfox from HornetMQ fame Tuesday, October 9, 12
  • 10. vert.x Framework to write polyglot, highly concurrent apps. Tuesday, October 9, 12
  • 11. vert.x Framework to write polyglot, highly concurrent apps. Tuesday, October 9, 12
  • 12. Javascript load('vertx.js') vertx.createHttpServer().requestHandler(function(req) { var file = req.path === '/' ? 'index.html' : req.path; req.response.sendFile('webroot/' + file); }).listen(8080) Tuesday, October 9, 12
  • 13. Javascript load('vertx.js') vertx.createHttpServer().requestHandler(function(req) { var file = req.path === '/' ? 'index.html' : req.path; req.response.sendFile('webroot/' + file); }).listen(8080) $ vertx run server.js Tuesday, October 9, 12
  • 14. Javascript load('vertx.js') vertx.createHttpServer().requestHandler(function(req) { var file = req.path === '/' ? 'index.html' : req.path; req.response.sendFile('webroot/' + file); }).listen(8080) $ vertx run server.js -instances 32 Tuesday, October 9, 12
  • 15. Ruby require "vertx" Vertx::HttpServer.new.request_handler do |req| file = req.uri == "/" ? "index.html" : req.uri req.response.send_file "webroot/#{file}" end.listen(8080) $ vertx run server.rb -instances 32 Tuesday, October 9, 12
  • 16. Python import vertx server = vertx.create_http_server() @server.request_handler def request_handler(req): file = "index.html" if req.uri == "/" else req.uri req.response.send_file("webroot/%s"%file) server.listen(8080) $ vertx run server.py -instances 32 Tuesday, October 9, 12
  • 17. Groovy vertx.createHttpServer().requestHandler { req -> def file = req.uri == "/" ? "index.html" : req.uri req.response.sendFile "webroot/$file" }.listen(8080) $ vertx run Server.groovy -instances 32 Tuesday, October 9, 12
  • 18. Java import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.deploy.Verticle; public class Server extends Verticle { public void start() { vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { String file = req.path.equals("/") ? "index.html" : req.path; req.response.sendFile("webroot/" + file); } }).listen(8080); } } $ vertx run Server.java -instances 32 Tuesday, October 9, 12
  • 19. vert.x Framework to write polyglot, highly concurrent apps. Tuesday, October 9, 12
  • 21. Core Concepts • Verticle Tuesday, October 9, 12
  • 22. Core Concepts • Verticle • vert.x instances Tuesday, October 9, 12
  • 23. Core Concepts • Verticle • vert.x instances • Event Bus Tuesday, October 9, 12
  • 24. Verticles run inside a vert.x instance. A single vert.x instance runs inside its own JVM instance. Tuesday, October 9, 12
  • 26. vertx run server.js -instances 32 Tuesday, October 9, 12
  • 27. Programming Model • Event Based (similar to node.js) • Event Handlers • Small set of threads per vert.x instance • Verticles are executed using the same thread. • Message Passing Communication Tuesday, October 9, 12
  • 29. vert.x core • TCP/SSL Servers Tuesday, October 9, 12
  • 30. vert.x core • TCP/SSL Servers • HTTP/HTTPS Servers Tuesday, October 9, 12
  • 31. vert.x core • TCP/SSL Servers • HTTP/HTTPS Servers • Websockets and Sock.js Tuesday, October 9, 12
  • 32. vert.x core • TCP/SSL Servers • HTTP/HTTPS Servers • Websockets and Sock.js • Distributed Event Bus Access Tuesday, October 9, 12
  • 33. vert.x core • TCP/SSL Servers • HTTP/HTTPS Servers • Websockets and Sock.js • Distributed Event Bus Access • Shared Maps and Sets Tuesday, October 9, 12
  • 34. vert.x core • TCP/SSL Servers • HTTP/HTTPS Servers • Websockets and Sock.js • Distributed Event Bus Access • Shared Maps and Sets • Logging Tuesday, October 9, 12
  • 36. Event Bus • Allows Verticles to talk to each other Tuesday, October 9, 12
  • 37. Event Bus • Allows Verticles to talk to each other • Works cross language Tuesday, October 9, 12
  • 38. Event Bus • Allows Verticles to talk to each other • Works cross language • Works across the cluster Tuesday, October 9, 12
  • 39. Event Bus • Allows Verticles to talk to each other • Works cross language • Works across the cluster • Spans from server to client side Tuesday, October 9, 12
  • 40. Event Bus - How • Register Handlers Tuesday, October 9, 12
  • 41. Event Bus - How • Register Handlers • Unregister Handlers Tuesday, October 9, 12
  • 42. Event Bus - How • Register Handlers • Unregister Handlers • Addresses Tuesday, October 9, 12
  • 43. Event Bus - How • Register Handlers • Unregister Handlers • Addresses • Messages (Transient) Tuesday, October 9, 12
  • 44. Register Handler var eb = vertx.eventBus; var myHandler = function(message)) { log.info('I received a message ' + message); } eb.registerHandler('test.address', myHandler); Tuesday, October 9, 12
  • 45. Register Handler var eb = vertx.eventBus; var myHandler = function(message)) { log.info('I received a message ' + message); } eb.registerHandler('test.address', myHandler); eb.unregisterHandler('test.address', myHandler); Tuesday, October 9, 12
  • 46. Publish Subscribe eb.publish('test.address', 'hello world'); Tuesday, October 9, 12
  • 47. Point to Point eb.send('test.address', 'hello world'); Tuesday, October 9, 12
  • 48. RPC Server var myHandler = function(message, replier) { log.info('I received a message ' + message); // Do some stuff // Now reply to it replier('This is a reply'); } eb.registerHandler('test.address', myHandler); Tuesday, October 9, 12
  • 49. RPC Client eb.send('test.address', 'This is a message', function(reply) { log.info('I received a reply ' + reply); }); Tuesday, October 9, 12
  • 50. Shared Data • Shared Maps Tuesday, October 9, 12
  • 51. Shared Data • Shared Maps • Shared Sets Tuesday, October 9, 12
  • 52. Shared Set Example load('vertx.js') var  conns  =  vertx.getSet('conns') var  server  =  vertx.createNetServer().connectHandler(function(socket)  {    conns.add(socket.writeHandlerID)    socket.dataHandler(function(data)  {        var  aconns  =  conns.toArray();        for  (var  i  =  0;  i  <  aconns.length;  i++)  {            vertx.eventBus.send(aconns[i],  data)        }    });    socket.closedHandler(function()  {  conns.remove(  socket.writeHandlerID)  }); }).listen(1234) Tuesday, October 9, 12
  • 54. Benchmarks I http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/ Tuesday, October 9, 12
  • 55. Benchmarks II http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/ Tuesday, October 9, 12
  • 57. Internals • Netty for network IO • JRuby for the Ruby Engine • Groovy • Mozilla Rhino for JS • Jython for Python support • Hazelcast for clustering Tuesday, October 9, 12
  • 60. Thanks! http://twitter.com/old_sound https://github.com/videlalvaro/ http://www.slideshare.net/old_sound Tuesday, October 9, 12