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

MicroProfile-Anwendungen mit Quarkus - reloaded

Dirk Weil
February 27, 2020

MicroProfile-Anwendungen mit Quarkus - reloaded

Präsentation zum Vortrag im Java Expertenkreis am 27.02.2020. Dieser Vortrag fügt sich an "MicroProfile-Anwendungen mit Quarkus" vom 31.10.2019 an und weitere Features von Quarkus, die zum Bau von Microservices, Self-contained Systems etc. eingesetzt werden können.

Dirk Weil

February 27, 2020
Tweet

More Decks by Dirk Weil

Other Decks in Programming

Transcript

  1. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Softwareentwicklung, Beratung,

    Konzepte, Reviews GEDOPLAN IT Training Java, JEE, Tools u.v.a.m. in Berlin, Bielefeld, on-site JEE seit 1998 Speaker und Autor 2 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  2. Quarkus recap JEE + MicroProfile + diverse Ergänzungen Spring-Boot-Alternative Dev

    Mode Hotspot VM und native https://quarkus.io/ 3 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  3. Quarkus recap Jakarta EE 8 Jakarta Persistence (aka JPA) mit

    Hibernate Autoconfiguration für H2, PostgreSQL, MariaDB, MySQL, MS SQL, Derby CDI Implementierung ARC mit limitiertem Support Jakarta RESTful Web Services (aka JAX-RS) RESTeasy mit JsonB-Support Servlet Undertow TX 4 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  4. Quarkus recap MicroProfile Config jetzt auch application.yaml Health, Metrics Rest

    Client 5 gedoplan.de greeting: message: Hello name: world "%dev": greeting: name: developer application.yaml @Inject @ConfigProperty(name = "greeting.name") String name; @Path("v2") @RegisterRestClient public interface CountryApi { @GET @Path("all") @Produces("application/json") Collection<Country> getAll(); @Inject @RestClient CountryApi countryClient; Microprofile-Anwendungen mit Quarkus - reloaded
  5. MicroProfile Fault Tolerance Interceptors für Resilience @Retry wiederholt Aufruf bei

    Fehler (=Exception) @Timeout bricht langsame Aufrufe ab @Fallback liefert Ersatzwert 6 @Retry(maxRetries = 4) public int doSomethingWithRetry() { @Timeout(1000) public int doSomethingWithTimeout() { private int return42() { return 42; } @Fallback(fallbackMethod = "return42") public int doSomethingWithFallback() { gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  6. MicroProfile Fault Tolerance Interceptors für Resilience @CircuitBreaker unterdrückt Aufrufe bei

    hoher Fehlerrate 7 @CircuitBreaker(failureRatio = 0.25, requestVolumeThreshold = 10) public int doSomethingWithCircuitBreaker() { Demo quarkus-fault-tolerance closed open half-open zu viele Fehler ok Delay Fehler gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  7. MicroProfile OpenTracing Aufrufverfolgung Zero Config für Rest Endpoints und MP

    Rest Clients @Traced Interceptor Binding Jaeger: Trace Collection + UI 8 gedoplan.de @Traced public String getPing() { Demo quarkus-opentracing Microprofile-Anwendungen mit Quarkus - reloaded
  8. (MicroProfile Reactive) Messaging Designierter neuer MP-Bestandteil 9 gedoplan.de @Inject @Channel("demo-channel-1")

    Emitter<String> emitter; … this.emitter.send(text); @Incoming("demo-channel-1") @Outgoing("demo-channel-2") String process(String text) { return text.toUpperCase(); @Incoming("demo-channel-2") void receive(String text) { this.log.debug("Received " + text); Demo quarkus-amqp quarkus-kafka Microprofile-Anwendungen mit Quarkus - reloaded
  9. (MicroProfile Reactive) Messaging Einbindung von Message Brokern (Artemis, Kafka) 10

    gedoplan.de @Inject @Channel("posted-person") Emitter<Person> emitter; … this.emitter.send(person); mp.messaging.outgoing.posted-person.connector=smallrye-kafka mp.messaging.outgoing.posted-person.topic=person mp.messaging.incoming.received-person.connector=smallrye-kafka mp.messaging.incoming.received-person.topic=person @Incoming("received-person") public void onReceive(Person person) { this.log.debug("onReceive(" + person + ")"); Microprofile-Anwendungen mit Quarkus - reloaded
  10. MicroProfile OpenAPI / Swagger Endpoint /openapi (konfigurierbar) API-Beschreibung kann mit

    Annotationen angereichert werden: 11 gedoplan.de $ curl http://localhost:8080/openapi --- openapi: 3.0.1 info: title: Generated API version: "1.0" paths: /person: get: summary: Get all persons responses: "200": description: OK @GET @Path("{id}") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Operation(summary = "Get a person") @APIResponse(description = "Found person (JSON/XML)") @APIResponse(responseCode = "404", description = "Person not found") public Person getById(@PathParam("id") Integer id) { Microprofile-Anwendungen mit Quarkus - reloaded
  11. MicroProfile OpenAPI / Swagger Swagger-UI unter /swagger-ui (konfigurierbar) 12 gedoplan.de

    Demo quarkus-rest-cdi-jpa Microprofile-Anwendungen mit Quarkus - reloaded
  12. Native Graal VM: Erstellung native application target/xyz-runner Nur tatsächlich genutzter

    Code Achtung: Reflection Build auf Non-Linux im Docker Container Startzeit im ms-Bereich, Memory consumption im MB-Bereich 13 gedoplan.de $ mvn -Pnative,docker … [INFO] docker run -v //c/GEDOPLAN/projects/gedoplan/showcase/quarkus-demo/q [quarkus-getting-started-runner:22] classlist: 4,939.89 ms … [quarkus-getting-started-runner:22] write: 576.45 ms [quarkus-getting-started-runner:22] [total]: 121,756.96 ms [INFO] Quarkus augmentation completed in 126125ms … [INFO] DOCKER> [docker.gedoplan.de/showcase/quarkus-getting-started:latest] Microprofile-Anwendungen mit Quarkus - reloaded
  13. MyFaces https://github.com/apache/myfaces/tree/master/extensions/quarkus Work in progress! View Files in src/main/resources/META-INF/resources Alle

    Scopes mit Ausnahme von @ConversationScoped Weitere Libraries: https://github.com/rmpestano/quarkus-omnifaces https://github.com/adminfaces/quarkus-admin-starter 14 gedoplan.de Demo quarkus-myfaces Microprofile-Anwendungen mit Quarkus - reloaded
  14. Weitere Features Websockets JMS NoSQL Flyway Security mit OpenID, Keycloak,

    JWT RBAC Spring DI, Web, Data JPA, Security Scheduling Mail Kotlin … 15 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  15. Fazit MicroProfile (+ JEE) = Lightweight Enterprise Java Quarkus ~

    Spring Boot für JEE kaum Umdenken notwendig für JEE-Entwickler macht Spaß native Ausführung möglich Richtung: Cloud, serverless (?) frühes Stadium, aber bewährte Komponenten 16 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded
  16. More github.com/GEDOPLAN/quarkus-demo Demo-Projekte www.gedoplan-it-training.de Trainings in Berlin, Bielefeld, inhouse neu:

    Microservices mit Quarkus - Grundlagen neu: Microservices mit Quarkus - Aufbau www.gedoplan-it-consulting.de Blog  [email protected] @dirkweil 17 gedoplan.de Microprofile-Anwendungen mit Quarkus - reloaded