Microservices ... · PDF fileHazelcast Ignite Zookeeper Cluster Mgmt Stomp Apache Camel...

Post on 22-Mar-2018

224 views 2 download

transcript

@burrsutter

Reactive Programming, Systems and Microservices

@burrsutter

http://bit.ly/reactiveworkshophttps://github.com/burrsutter/reactive_tutorial_jfokus17

@burrsutter

Change History

0.1 - JFokus 2017

@burrsutter developers.redhat.com

http://developers.redhat.com

@burrsutter

@burrsutter

Hej världen(Hello World)

@burrsutter

State of the Art

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter

@burrsutter https://www.redhat.com/en/about/videos/ikea-vs-shellshock#

@burrsutter

@burrsutter

@burrsutter

ThingsChUI

80’s

GUI

90’s

Web

00’s

Mobile

10’s

@burrsutter

@burrsutter

Ingestion Analytics

Sensors

Actuators

Gateway

Dashboards

Workflow

Integration

Control MessagesConfiguration

@burrsutter

Reactive

@burrsutter

@burrsutter

@burrsutter

@burrsutter

Reactive ManifestoReactive Systems

Elastic Resilient

Message Driven

Responsive

http://www.reactivemanifesto.org/

@burrsutter

Reactive programming is programming with asynchronous data streams.

@burrsutter

@burrsutter

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

http://reactivex.io/https://github.com/ReactiveX/RxJava

@burrsutter

@burrsutter

@burrsutter

Vertx.io an Eclipse project

@burrsutter

Vert.x is a toolkit for building reactive

applications on the JVM.

@burrsutter

HTTP 1&2 UDP Event Bus Shared Data TCP

Hazelcast

Ignite

Zookeeper

Cluster Mgmt

Stomp

Apache Camel

RabbitMQ

Integration

AMQP

Vert.x Core

Templating

Auth & OAuth

Router

Web

Service Discovery

Circuit Breaker

Microservices

Java

Groovy

JavaScript

Languages

Ruby

MySQL/Postgres

Mongo

JDBC

Data

Redis

Hawkular Dropwizard Shell

Metrics & Ops

TCP SockJS

Bridges

@burrsutter

Vert.x Verticle

Ver

ticle

1

Ver

ticle

2

Ver

ticle

3

Ver

ticle

4

Ver

ticle

5

JVM

Vert.x Instance

vertx.eventBus

A Verticle is the programmable unit – a component

A Verticle is always executed on the same thread

A single thread may execute several verticles – event loop

A Verticle Instance normally starts 1 thread/event-loop per core

@burrsutter

@burrsutter

Event Providers

Handlers

Events

while(true) {Get next eventFind interested handlersDispatch the event

}

@burrsutter

@burrsutter

Web Apps & REST

@burrsutter

@burrsutter

router.get("/api/whiskies").handler(this::getAll); router.get("/api/whiskies/:id").handler(this::getOne); router.post("/api/whiskies").handler(this::addOne); router.delete("/api/whiskies/:id").handler(this::deleteOne); router.put("/api/whiskies/:id").handler(this::updateOne); // Serve static resources from the /assets directory router.route("/assets/*").handler(StaticHandler.create("assets"));

vertx .createHttpServer() .requestHandler(router::accept) .listen(8080, result -> { if (result.succeeded()) { future.complete(); } else { // could be something else is running on our port future.fail(result.cause()); } });

Vert.x HTTP Router

@burrsutter

Vert.x EventBus

Ver

ticle

1

Ver

ticle

2

Ver

ticle

3

Ver

ticle

4

Ver

ticle

5

JVM

Vert.x Instance

Ver

ticle

1

Ver

ticle

2

Ver

ticle

6

Ver

ticle

7

JVM

Vert.x Instance

vertx.eventBus

@burrsutter

Reactive ManifestoReactive Systems

Elastic Resilient

Message Driven

Responsive

http://www.reactivemanifesto.org/

@burrsutter

Reactive Programming, Systems and Microservices

@burrsutter

http://bit.ly/reactiveworkshophttps://github.com/burrsutter/reactive_tutorial_jfokus17