SlideShare une entreprise Scribd logo
1  sur  32
tool-kit for building reactive
applications on the JVM
Ivan Drizhiruk
Maxim Sabarnya
+380 (63) 223-17-47 • ardas.ua
Problems of enterprise solutions
● Multithreading programming
● Communication client/server
● Large application architecture
● Scalability
● Management
● Performance
+380 (63) 223-17-47 • ardas.ua
Multithreading programming
+380 (63) 223-17-47 • ardas.ua
+380 (63) 223-17-47 • ardas.ua
Vert.x Event loop
+380 (63) 223-17-47 • ardas.ua
Vert.x Event loop
+380 (63) 223-17-47 • ardas.ua
Vert.x Event Bus
+380 (63) 223-17-47 • ardas.ua
Vert.x Event Bus
eventBus.
publish("news.ua.sport", "Yay! Someone kicked a ball");
eventBus.
send("news.ua.sport", "Yay! Someone kicked a ball",
Handler<? extends Message> handler);
eventBus
.registerHandler(
"news.ua.sport",
Handler<? extends Message> handler);
+380 (63) 223-17-47 • ardas.ua
Verticles / Workers / Event bus
● A verticle never gets executed by more than one thread concurrently
● No race conditions, no deadlocks. You write your code as single threaded
● Never block event loop
● Use workers
● Asynchronous model
● Verticles are isolated by separate class loaders
● Send - for one listener, publish - for all listeners
+380 (63) 223-17-47 • ardas.ua
Communication client/server
+380 (63) 223-17-47 • ardas.ua
Event Bus Bridge
+380 (63) 223-17-47 • ardas.ua
Event Bus Bridge
<script src="vertxbus-2.1.js"></script>
var eventBus = new vertx.EventBus('//domainexample/testapp/eventbus');
eventBus.send(address, message, replyHandler);
eventBus.publish(address, message)
eventBus.registerHandler(address, handler);
+380 (63) 223-17-47 • ardas.ua
ServerHook
public interface EventBusBridgeHook {
boolean handleSocketCreated(SockJSSocket sock);
void handleSocketClosed(SockJSSocket sock);
boolean handlePreRegister(SockJSSocket sock, String address);
void handlePostRegister(SockJSSocket sock, String address);
boolean handleUnregister(SockJSSocket sock, String address);
boolean handleSendOrPub(SockJSSocket sock, boolean send, JsonObject msg, String address);
boolean handleAuthorise(JsonObject message, String sessionID,
Handler<AsyncResult<Boolean>> handler);
}
+380 (63) 223-17-47 • ardas.ua
Large application architecture
+380 (63) 223-17-47 • ardas.ua
Large application architecture
+380 (63) 223-17-47 • ardas.ua
Architecture - microservices
+380 (63) 223-17-47 • ardas.ua
Vert.x Modules
● Package verticles into re-usable modules
● Simply a zip containing module definition, code and
resources
● Modules can be “zip” artifacts released in Maven
Central
● Vert.x web site maintains a listing of Vert.x modules
+380 (63) 223-17-47 • ardas.ua
Pain
● Content assist in IDE don’t work for busmod APIs
+380 (63) 223-17-47 • ardas.ua
Pain
● You often find yourself tracing errors in the busmods,
which can be difficult because the stack trace stops at
message passing
+380 (63) 223-17-47 • ardas.ua
Pain
● Hell of anonymous inner class callbacks
vertx.eventBus().registerHandler(EVENT_LOG, new Handler<Message>() {
@Override
public void handle(Message message) {
vertx.eventBus().send(CASSANDRA_CLIENT, message.body(), new Handler<Message>() {
@Override
public void handle(Message event) {
message.reply(true);
}
});
}
});
+380 (63) 223-17-47 • ardas.ua
Pain
● Hell of anonymous inner class callbacks
vertx.eventBus().registerHandler(EVENT_LOG,
inMessage -> vertx.eventBus().send(CASSANDRA_CLIENT, inMessage.body(),
event -> inMessage.reply(true)));
});
+380 (63) 223-17-47 • ardas.ua
Pain
● Custom objects from shared memory can’t be used in
different verticles
Obj Cucumber ≠ Obj Cucumber
+380 (63) 223-17-47 • ardas.ua
Pain
● Changing standard behaviour
+380 (63) 223-17-47 • ardas.ua
Development process
Run Mode
● java
● html
● js
{
"main":"ua.dp.ardas
.EntryPointVerticle",
"auto-redeploy": true
}
src/main/resources/mod.json
+380 (63) 223-17-47 • ardas.ua
Development process
You can use Vert.x with multiple languages
● Java
● JavaScript
● Groovy
● Ruby.
+380 (63) 223-17-47 • ardas.ua
History
● 17/06/11 - First commit in project "Node.x"
● 09/05/12 - Vert.x 1.0 final released
● 17/07/13 - Vert.x 2.0 final released
● 08/13 - Vert.x joins Eclipse Foundation
● 05/14 - Vert.x won the award for "Most Innovative Java
Technology" at the JAX Innovation awards
● 13/11/14 - Vert.x 2.1.5 released
● 24/06/15 - Vert.x 3.0.0 released
+380 (63) 223-17-47 • ardas.ua
Performance
+380 (63) 223-17-47 • ardas.ua
Performance
+380 (63) 223-17-47 • ardas.ua
Example - chat
+380 (63) 223-17-47 • ardas.ua
Who’s using Vert.x ?
+380 (63) 223-17-47 • ardas.ua
Summary
The platform for modern web and enterprise application
development.
● The best choice for new generation of rich client apps
● Polyglot: Use the language you want
● Seamless scalability
● Simplicity and Power
● Top end performance
email: ivan.drizhiruk@ardas.ua
skype: ivan.drizhiruk
email: maxim.sabarnya@ardas.ua
skype: sabarnya.maxim
Questions?

Contenu connexe

Tendances

What I learned from FluentConf and then some
What I learned from FluentConf and then someWhat I learned from FluentConf and then some
What I learned from FluentConf and then some
Ohad Kravchick
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
FleetDB: A Schema-Free Database in Clojure
FleetDB: A Schema-Free Database in ClojureFleetDB: A Schema-Free Database in Clojure
FleetDB: A Schema-Free Database in Clojure
Mark McGranaghan
 
Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best Practices
Doris Chen
 

Tendances (20)

Seattle C* Meetup: Hardening cassandra for compliance or paranoia
Seattle C* Meetup: Hardening cassandra for compliance or paranoiaSeattle C* Meetup: Hardening cassandra for compliance or paranoia
Seattle C* Meetup: Hardening cassandra for compliance or paranoia
 
DevOpsDays Warsaw 2015: Running High Performance And Fault Tolerant Elasticse...
DevOpsDays Warsaw 2015: Running High Performance And Fault Tolerant Elasticse...DevOpsDays Warsaw 2015: Running High Performance And Fault Tolerant Elasticse...
DevOpsDays Warsaw 2015: Running High Performance And Fault Tolerant Elasticse...
 
Static Typing in Vault
Static Typing in VaultStatic Typing in Vault
Static Typing in Vault
 
Coursera Cassandra Driver
Coursera Cassandra DriverCoursera Cassandra Driver
Coursera Cassandra Driver
 
Ground Control to Nomad Job Dispatch
Ground Control to Nomad Job DispatchGround Control to Nomad Job Dispatch
Ground Control to Nomad Job Dispatch
 
Integrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suiteIntegrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suite
 
Hardening cassandra q2_2016
Hardening cassandra q2_2016Hardening cassandra q2_2016
Hardening cassandra q2_2016
 
Software Development with Apache Cassandra
Software Development with Apache CassandraSoftware Development with Apache Cassandra
Software Development with Apache Cassandra
 
What I learned from FluentConf and then some
What I learned from FluentConf and then someWhat I learned from FluentConf and then some
What I learned from FluentConf and then some
 
Meetup cassandra sfo_jdbc
Meetup cassandra sfo_jdbcMeetup cassandra sfo_jdbc
Meetup cassandra sfo_jdbc
 
bootstrapping containers with confd
bootstrapping containers with confdbootstrapping containers with confd
bootstrapping containers with confd
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
Incrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern AutomationIncrementalism: An Industrial Strategy For Adopting Modern Automation
Incrementalism: An Industrial Strategy For Adopting Modern Automation
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 
Rails Caching Secrets from the Edge
Rails Caching Secrets from the EdgeRails Caching Secrets from the Edge
Rails Caching Secrets from the Edge
 
FleetDB: A Schema-Free Database in Clojure
FleetDB: A Schema-Free Database in ClojureFleetDB: A Schema-Free Database in Clojure
FleetDB: A Schema-Free Database in Clojure
 
Hardening cassandra for compliance or paranoia
Hardening cassandra for compliance or paranoiaHardening cassandra for compliance or paranoia
Hardening cassandra for compliance or paranoia
 
Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best Practices
 
Async servers and clients in Rest.li
Async servers and clients in Rest.liAsync servers and clients in Rest.li
Async servers and clients in Rest.li
 
Observability with Consul Connect
Observability with Consul ConnectObservability with Consul Connect
Observability with Consul Connect
 

En vedette

SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
Ngoc Dao
 

En vedette (9)

Vert.x
Vert.xVert.x
Vert.x
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Vert.x devoxx london 2013
Vert.x devoxx london 2013Vert.x devoxx london 2013
Vert.x devoxx london 2013
 
Vert.x
Vert.xVert.x
Vert.x
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
 
Production ready Vert.x
Production ready Vert.xProduction ready Vert.x
Production ready Vert.x
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
 
vert.x 3.1 - be reactive on the JVM but not only in Java
vert.x 3.1 - be reactive on the JVM but not only in Javavert.x 3.1 - be reactive on the JVM but not only in Java
vert.x 3.1 - be reactive on the JVM but not only in Java
 

Similaire à Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive applications on the JVM”

[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
CODE BLUE
 

Similaire à Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive applications on the JVM” (20)

ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The WinITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
ITCamp 2018 - Magnus Mårtensson - Azure Resource Manager For The Win
 
Terraform introduction
Terraform introductionTerraform introduction
Terraform introduction
 
2009 - Basta!: Url rewriting mit iis, asp.net und routing engine
2009 - Basta!: Url rewriting mit iis, asp.net und routing engine2009 - Basta!: Url rewriting mit iis, asp.net und routing engine
2009 - Basta!: Url rewriting mit iis, asp.net und routing engine
 
Extending HashiCorp Nomad with Plugins
Extending HashiCorp Nomad with PluginsExtending HashiCorp Nomad with Plugins
Extending HashiCorp Nomad with Plugins
 
AWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaAWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and Java
 
Максим Сабарня “NoSQL: Not only SQL in developer’s life”
Максим Сабарня “NoSQL: Not only SQL in developer’s life” Максим Сабарня “NoSQL: Not only SQL in developer’s life”
Максим Сабарня “NoSQL: Not only SQL in developer’s life”
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMS
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Modular Web Applications With Netzke
Modular Web Applications With NetzkeModular Web Applications With Netzke
Modular Web Applications With Netzke
 
Dynamic Data Visualization With Chartkick
Dynamic Data Visualization With ChartkickDynamic Data Visualization With Chartkick
Dynamic Data Visualization With Chartkick
 
Git dvcs and Information Security Review
Git dvcs and Information Security ReviewGit dvcs and Information Security Review
Git dvcs and Information Security Review
 
From the fire hose series an insider’s guide to desktop virtualization
From the fire hose series an insider’s guide to desktop virtualization From the fire hose series an insider’s guide to desktop virtualization
From the fire hose series an insider’s guide to desktop virtualization
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
 
GopherCon Gilmour
GopherCon GilmourGopherCon Gilmour
GopherCon Gilmour
 
DevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps ToolchainsDevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps Toolchains
 
Oracle to Azure PostgreSQL database migration webinar
Oracle to Azure PostgreSQL database migration webinarOracle to Azure PostgreSQL database migration webinar
Oracle to Azure PostgreSQL database migration webinar
 
Domain-Driven Design with SeedStack
Domain-Driven Design with SeedStackDomain-Driven Design with SeedStack
Domain-Driven Design with SeedStack
 
Hazelcast
HazelcastHazelcast
Hazelcast
 
10 Excellent Ways to Secure Your Spring Boot Application - Devoxx Belgium 2019
10 Excellent Ways to Secure Your Spring Boot Application - Devoxx Belgium 201910 Excellent Ways to Secure Your Spring Boot Application - Devoxx Belgium 2019
10 Excellent Ways to Secure Your Spring Boot Application - Devoxx Belgium 2019
 
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
 

Plus de Anna Shymchenko

Plus de Anna Shymchenko (20)

Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "Константин Маркович: "Creating modular application using Spring Boot "
Константин Маркович: "Creating modular application using Spring Boot "
 
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
 
Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"Евгений Руднев: "Programmers Approach to Error Handling"
Евгений Руднев: "Programmers Approach to Error Handling"
 
Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++" Александр Куцан: "Static Code Analysis in C++"
Александр Куцан: "Static Code Analysis in C++"
 
Алесей Решта: “Robotics Sport & Luxoft Open Robotics Club”
Алесей Решта: “Robotics Sport & Luxoft Open Robotics Club” Алесей Решта: “Robotics Sport & Luxoft Open Robotics Club”
Алесей Решта: “Robotics Sport & Luxoft Open Robotics Club”
 
Орхан Гасимов: "Reactive Applications in Java with Akka"
Орхан Гасимов: "Reactive Applications in Java with Akka"Орхан Гасимов: "Reactive Applications in Java with Akka"
Орхан Гасимов: "Reactive Applications in Java with Akka"
 
Евгений Хыст: "Server-Side Geo-Clustering Based on Geohash"
Евгений Хыст: "Server-Side Geo-Clustering Based on Geohash"Евгений Хыст: "Server-Side Geo-Clustering Based on Geohash"
Евгений Хыст: "Server-Side Geo-Clustering Based on Geohash"
 
Денис Прокопюк: “JMX in Java EE applications”
Денис Прокопюк: “JMX in Java EE applications”Денис Прокопюк: “JMX in Java EE applications”
Денис Прокопюк: “JMX in Java EE applications”
 
Роман Яворский "Introduction to DevOps"
Роман Яворский "Introduction to DevOps"Роман Яворский "Introduction to DevOps"
Роман Яворский "Introduction to DevOps"
 
Андрей Лисниченко "SQL Injection"
Андрей Лисниченко "SQL Injection"Андрей Лисниченко "SQL Injection"
Андрей Лисниченко "SQL Injection"
 
Светлана Мухина "Metrics on agile projects"
Светлана Мухина "Metrics on agile projects"Светлана Мухина "Metrics on agile projects"
Светлана Мухина "Metrics on agile projects"
 
Андрей Слободяник "Test driven development using mockito"
Андрей Слободяник "Test driven development using mockito"Андрей Слободяник "Test driven development using mockito"
Андрей Слободяник "Test driven development using mockito"
 
Евгений Хыст "Application performance database related problems"
Евгений Хыст "Application performance database related problems"Евгений Хыст "Application performance database related problems"
Евгений Хыст "Application performance database related problems"
 
Даурен Муса “IBM WebSphere - expensive but effective”
Даурен Муса “IBM WebSphere - expensive but effective” Даурен Муса “IBM WebSphere - expensive but effective”
Даурен Муса “IBM WebSphere - expensive but effective”
 
Александр Пашинский "Reinventing Design Patterns with Java 8"
Александр Пашинский "Reinventing Design Patterns with Java 8"Александр Пашинский "Reinventing Design Patterns with Java 8"
Александр Пашинский "Reinventing Design Patterns with Java 8"
 
Евгений Капинос "Advanced JPA (Java Persistent API)"
Евгений Капинос "Advanced JPA (Java Persistent API)"Евгений Капинос "Advanced JPA (Java Persistent API)"
Евгений Капинос "Advanced JPA (Java Persistent API)"
 
Event-driven architecture with Java technology stack
Event-driven architecture with Java technology stackEvent-driven architecture with Java technology stack
Event-driven architecture with Java technology stack
 
Do we need SOLID principles during software development?
Do we need SOLID principles during software development?Do we need SOLID principles during software development?
Do we need SOLID principles during software development?
 
Guava - Elements of Functional Programming
Guava - Elements of Functional Programming Guava - Elements of Functional Programming
Guava - Elements of Functional Programming
 
Сергей Гончарук "Working with uncertainty"
 	Сергей Гончарук "Working with uncertainty"  	Сергей Гончарук "Working with uncertainty"
Сергей Гончарук "Working with uncertainty"
 

Dernier

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Dernier (20)

Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

Максим Сабарня и Иван Дрижирук “Vert.x – tool-kit for building reactive applications on the JVM”

  • 1. tool-kit for building reactive applications on the JVM Ivan Drizhiruk Maxim Sabarnya
  • 2. +380 (63) 223-17-47 • ardas.ua Problems of enterprise solutions ● Multithreading programming ● Communication client/server ● Large application architecture ● Scalability ● Management ● Performance
  • 3. +380 (63) 223-17-47 • ardas.ua Multithreading programming
  • 4. +380 (63) 223-17-47 • ardas.ua
  • 5. +380 (63) 223-17-47 • ardas.ua Vert.x Event loop
  • 6. +380 (63) 223-17-47 • ardas.ua Vert.x Event loop
  • 7. +380 (63) 223-17-47 • ardas.ua Vert.x Event Bus
  • 8. +380 (63) 223-17-47 • ardas.ua Vert.x Event Bus eventBus. publish("news.ua.sport", "Yay! Someone kicked a ball"); eventBus. send("news.ua.sport", "Yay! Someone kicked a ball", Handler<? extends Message> handler); eventBus .registerHandler( "news.ua.sport", Handler<? extends Message> handler);
  • 9. +380 (63) 223-17-47 • ardas.ua Verticles / Workers / Event bus ● A verticle never gets executed by more than one thread concurrently ● No race conditions, no deadlocks. You write your code as single threaded ● Never block event loop ● Use workers ● Asynchronous model ● Verticles are isolated by separate class loaders ● Send - for one listener, publish - for all listeners
  • 10. +380 (63) 223-17-47 • ardas.ua Communication client/server
  • 11. +380 (63) 223-17-47 • ardas.ua Event Bus Bridge
  • 12. +380 (63) 223-17-47 • ardas.ua Event Bus Bridge <script src="vertxbus-2.1.js"></script> var eventBus = new vertx.EventBus('//domainexample/testapp/eventbus'); eventBus.send(address, message, replyHandler); eventBus.publish(address, message) eventBus.registerHandler(address, handler);
  • 13. +380 (63) 223-17-47 • ardas.ua ServerHook public interface EventBusBridgeHook { boolean handleSocketCreated(SockJSSocket sock); void handleSocketClosed(SockJSSocket sock); boolean handlePreRegister(SockJSSocket sock, String address); void handlePostRegister(SockJSSocket sock, String address); boolean handleUnregister(SockJSSocket sock, String address); boolean handleSendOrPub(SockJSSocket sock, boolean send, JsonObject msg, String address); boolean handleAuthorise(JsonObject message, String sessionID, Handler<AsyncResult<Boolean>> handler); }
  • 14. +380 (63) 223-17-47 • ardas.ua Large application architecture
  • 15. +380 (63) 223-17-47 • ardas.ua Large application architecture
  • 16. +380 (63) 223-17-47 • ardas.ua Architecture - microservices
  • 17. +380 (63) 223-17-47 • ardas.ua Vert.x Modules ● Package verticles into re-usable modules ● Simply a zip containing module definition, code and resources ● Modules can be “zip” artifacts released in Maven Central ● Vert.x web site maintains a listing of Vert.x modules
  • 18. +380 (63) 223-17-47 • ardas.ua Pain ● Content assist in IDE don’t work for busmod APIs
  • 19. +380 (63) 223-17-47 • ardas.ua Pain ● You often find yourself tracing errors in the busmods, which can be difficult because the stack trace stops at message passing
  • 20. +380 (63) 223-17-47 • ardas.ua Pain ● Hell of anonymous inner class callbacks vertx.eventBus().registerHandler(EVENT_LOG, new Handler<Message>() { @Override public void handle(Message message) { vertx.eventBus().send(CASSANDRA_CLIENT, message.body(), new Handler<Message>() { @Override public void handle(Message event) { message.reply(true); } }); } });
  • 21. +380 (63) 223-17-47 • ardas.ua Pain ● Hell of anonymous inner class callbacks vertx.eventBus().registerHandler(EVENT_LOG, inMessage -> vertx.eventBus().send(CASSANDRA_CLIENT, inMessage.body(), event -> inMessage.reply(true))); });
  • 22. +380 (63) 223-17-47 • ardas.ua Pain ● Custom objects from shared memory can’t be used in different verticles Obj Cucumber ≠ Obj Cucumber
  • 23. +380 (63) 223-17-47 • ardas.ua Pain ● Changing standard behaviour
  • 24. +380 (63) 223-17-47 • ardas.ua Development process Run Mode ● java ● html ● js { "main":"ua.dp.ardas .EntryPointVerticle", "auto-redeploy": true } src/main/resources/mod.json
  • 25. +380 (63) 223-17-47 • ardas.ua Development process You can use Vert.x with multiple languages ● Java ● JavaScript ● Groovy ● Ruby.
  • 26. +380 (63) 223-17-47 • ardas.ua History ● 17/06/11 - First commit in project "Node.x" ● 09/05/12 - Vert.x 1.0 final released ● 17/07/13 - Vert.x 2.0 final released ● 08/13 - Vert.x joins Eclipse Foundation ● 05/14 - Vert.x won the award for "Most Innovative Java Technology" at the JAX Innovation awards ● 13/11/14 - Vert.x 2.1.5 released ● 24/06/15 - Vert.x 3.0.0 released
  • 27. +380 (63) 223-17-47 • ardas.ua Performance
  • 28. +380 (63) 223-17-47 • ardas.ua Performance
  • 29. +380 (63) 223-17-47 • ardas.ua Example - chat
  • 30. +380 (63) 223-17-47 • ardas.ua Who’s using Vert.x ?
  • 31. +380 (63) 223-17-47 • ardas.ua Summary The platform for modern web and enterprise application development. ● The best choice for new generation of rich client apps ● Polyglot: Use the language you want ● Seamless scalability ● Simplicity and Power ● Top end performance
  • 32. email: ivan.drizhiruk@ardas.ua skype: ivan.drizhiruk email: maxim.sabarnya@ardas.ua skype: sabarnya.maxim Questions?