Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reactive Microservices based on Vert.x

Reactive Microservices based on Vert.x

Kristian Kottke

March 19, 2019
Tweet

More Decks by Kristian Kottke

Other Decks in Programming

Transcript

  1. ©iteratec Whoami Kristian Kottke › Lead Software Engineer -> iteratec

    Interests › Software Architecture › Big Data Technologies [email protected] @_kkottke github.com/kkottke xing.to/kkottke speakerdeck.com/kkottke
  2. ©iteratec Microservice cloud native fault tolerance highly responsive scalable resilient

    high availability multi core asynchronous flexible loosely coupled elastic Reactive System
  3. ©iteratec Event Bus Host JVM Vert.x Instance Verticle (Java) Verticle

    (Java) Verticle (JS) Verticle (Kotlin) JVM Vert.x Instance Verticle (Java) Verticle (Java) Verticle (JS) Verticle (Kotlin)
  4. ©iteratec Event Bus Host JVM Vert.x Instance Verticle (Java) Verticle

    (Java) Verticle (JS) Verticle (Kotlin) Host JVM Vert.x Instance Verticle (Java) Verticle (Java) Verticle (JS) Verticle (Kotlin)
  5. ©iteratec Event Bus Host JVM Vert.x Instance Verticle (Java) Verticle

    (Java) Verticle (JS) Verticle (Kotlin) Event Bus Bridge
  6. ©iteratec public static void main(String[] args) { Vertx vertx =

    new Vertx(); vertx.deployVerticle(new RestApiVerticle()); } Verticle
  7. ©iteratec public void start(Future<Void> future) { HttpServer server = vertx.createHttpServer()

    .requestHandler(req -> req.response().end(„hello“)); server.listen(8080, res -> { if (res.succeeded()) { future.complete(); } else { future.fail(res.cause()); }}); } RestApiVerticle
  8. ©iteratec Don’t call us, we’ll call you! ›Synchronous (blocking) compute(1,

    2); ›Asynchronous (non-blocking) compute(1, 2, res -> {…}); ›Everything is an event → Handler → Callback Hell → RX
  9. ©iteratec Digression: ReactiveX ›API for async programming with observable streams

    ›Observable › Evolution of Callback, Promise, Future › Subscribe: next, error, complete › Completable, Single, Maybe, Flowable ›Reactive Operators Observable Observable Subcriber onNext Produce
  10. ©iteratec public Completable rxStart() { return OpenAPI3RouterFactory.rxCreate(vertx, „api.yml“) .map(factory ->

    { factory.addHandlerByOperationId(„op“, this:op); return factory.getRouter(); }) .flatMap(router -> vertx.createHttpServer() .requestHandler(router) .rxListen(8080)) .ignoreElement(); } Web API Contract
  11. ©iteratec public void publish(Message mes) { vertx.eventBus().publish(„addr“, Json.encode(mes)); vertx.eventBus().rxSend(„addr“, Json.encode(mes));

    } public void handle() { vertx.eventBus().<String>consumer(„addr“, m -> { Message mes = Json.decodeValue(m.body(), Message.class); .... } } Event Bus
  12. ©iteratec @ProxyGen @VertxGen public interface TradingService { @Fluent TradingService buy(int

    amount, JsonObject json, Handler<AsyncResult<Portfolio>> handler); } Service Proxy (RPC)
  13. ©iteratec public void publish() { ServiceDiscovery sd = ServiceDiscovery.create(vertx); Record

    http = HttpEndpoint.createRecord(...); Record message = MessageSource.createRecord(...); Record service = EventBusService.createRecord(...); sd.rxPublish(http); } Service Discovery
  14. ©iteratec public void consume() { ServiceDiscovery sd = ServiceDiscovery.create(vertx); client

    = HttpEndpoint.rxGetWebClient(sd, json); consumer = MessageSource.rxGetConsumer(sd, json); proxy = EventBusService.getServiceProxy(sd, ...); } Service Discovery
  15. ©iteratec Failure Handling ›Error Handler › subscribe(success, error) ›Error Operator

    › doOnError, onErrorReturn, ... ›Timeout Operator › timeout ›Retry Operator › retry, retryWhen ›Circuit Breaker › breaker.execute(...)
  16. ©iteratec Are we reactive now? ›Reactive Programming › Asynchronous, non-blocking

    › Event-Driven ›Reactive System › Responsive › Resilient › Elastic › Message-Driven
  17. ©iteratec Wrap Up ›Toolkit for building reactive, non-blocking applications ›Multi-Reactor

    Pattern & Event Bus › Asynchronous › Event-Driven › Performance & Scalability