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

Reactive Microservices with Spring Boot and JHipster - The Golden Path to SpringOne 2023

Reactive Microservices with Spring Boot and JHipster - The Golden Path to SpringOne 2023

Microservice architectures are all the rage in JavaLand. They allow teams to develop services independently and deploy autonomously.

Why microservices?

IF
  you are developing a large/complex application
AND
  you need to deliver it rapidly, frequently, and reliably over a long period of time
THEN
  the Microservice Architecture is often a good choice.

Reactive architectures are becoming increasingly popular for organizations that need to do more, with less hardware. Reactive programming allows you to build systems that are resilient to high load.

In this session, I'll show you how to use JHipster to create a reactive microservices architecture with Spring Boot, Spring Cloud, Keycloak, and run it all in Docker. You will leave with the know-how to create your own resilient apps!

YouTube recording: https://www.youtube.com/live/kq31RuT4Bxw
Demo script: reactive-jhipster/demo.adoc
GitHub repo: @oktadev/auth0-java-microservices-examples

Matt Raible

February 28, 2023
Tweet

More Decks by Matt Raible

Other Decks in Programming

Transcript

  1. Reactive Java Microservices


    with Spring Boot and JHipster
    February 28, 2023
    Matt Raible | @mraible
    Photo by Joel Holland

    https://unsplash.com/photos/TRhGEGdw-YY

    View full-size slide

  2. What is JHipster?

    View full-size slide

  3. How to Use JHipster
    Install JHipster using npm:


    npm install -g generator-jhipster
    Create a directory and cd into it:


    take app
    Run it!


    jhipster

    View full-size slide

  4. Monolith, Gateway, or Microservices?


    Spring MVC or Spring WebFlux?


    Authentication Type?


    Database Type?


    Build Tool?


    Web Framework?
    JHipster Options

    View full-size slide

  5. https://start.jhipster.tech

    View full-size slide

  6. Thriving OSS Project
    Started by Julien Dubois on October 21, 2013
    App Generator, Platform, Learning Tool …

    View full-size slide

  7. @mraible
    Hi, I’m Matt Raible
    Father, Husband, Skier, Mountain
    Biker, Whitewater Rafter


    Bus Lover


    Web Developer and Java Champion


    Okta Developer Advocate


    Blogger on raibledesigns.com and
    developer.okta.com/blog
    @mraible

    View full-size slide

  8. developer.okta.com

    View full-size slide

  9. Spring
    History of Spring


    October 2002 - Rod Johnson writes


    J2EE Design & Development


    2004 - Spring 1.0


    2006 - Spring 2.0 with better XML


    2009 - JavaConfig


    2014 - Spring Boot 1.0


    2015 - Spring Cloud 1.0
    🍃

    View full-size slide

  10. Microservices Visionaries

    View full-size slide

  11. “Any organization that designs a system
    (defined broadly) will produce a design
    whose structure is a copy of the
    organization's communication structure.”
    Conway’s Law
    Melvin Conway 1967

    View full-size slide

  12. “Do one thing and do it well.”

    View full-size slide

  13. Spring WebFlux!

    View full-size slide

  14. Spring MVC Code
    @PostMapping("/points")


    public ResponseEntity createPoints(@Valid @RequestBody Points points) throws URISyntaxException {


    log.debug("REST request to save Points : {}", points);


    if (points.getId() != null) {


    throw new BadRequestAlertException("A new points cannot already have an ID", ENTITY_NAME, "idexists");


    }


    Points result = pointsRepository.save(points);


    pointsSearchRepository.save(result);


    return ResponseEntity


    .created(new URI("/api/points/" + result.getId()))


    .headers(HeaderUtil.createEntityCreationAlert(


    applicationName, true, ENTITY_NAME, result.getId().toString()))


    .body(result);


    }

    View full-size slide

  15. Spring WebFlux Code
    @PostMapping("/points")


    public Mono> createPoints(@Valid @RequestBody Points points) throws URISyntaxException {


    log.debug("REST request to save Points : {}", points);


    if (points.getId() != null) {


    throw new BadRequestAlertException("A new points cannot already have an ID", ENTITY_NAME, "idexists");


    }


    return pointsRepository


    .save(points)


    .flatMap(pointsSearchRepository::save)


    .map(


    result -> {


    try {


    return ResponseEntity


    .created(new URI("/api/points/" + result.getId()))


    .headers(HeaderUtil.createEntityCreationAlert(


    applicationName, true, ENTITY_NAME, result.getId().toString()))


    .body(result);


    } catch (URISyntaxException e) {


    throw new RuntimeException(e);


    }


    }


    );


    }

    View full-size slide

  16. Spring Cloud Gateway

    View full-size slide

  17. yelp.com/callback
    Back to redirect URI


    with authorization code


    Exchange code for


    access token and ID token
    accounts.google.com
    Email
    **********
    Go to authorization server


    Redirect URI: yelp.com/cb


    Scope: openid profile
    Authorization Server
    yelp.com
    Connect with Google
    Resource owner
    Client
    accounts.google.com



    Allow Yelp to access your public
    profile and contacts?
    No Yes
    Request consent


    from resource owner
    Hello Matt!
    accounts.google
    Get user info

    with access token
    /userinfo
    OAuth 2.0 and OIDC

    View full-size slide

  18. Demo
    Create microservices with JDL


    Run apps and e2e tests


    Switch identity providers


    Run everything with Docker


    https://github.com/oktadev/auth0-
    java-microservices-examples
    🤓

    View full-size slide

  19. https://auth0.com/blog/micro-frontends-for-java-microservices

    View full-size slide

  20. What You Learned

    View full-size slide

  21. https://developer.okta.com/blog/2021/01/20/reactive-java-microservices

    View full-size slide

  22. https://developer.okta.com/blog/2021/06/01/kubernetes-spring-boot-jhipster

    View full-size slide

  23. npm install -g generator-jhipster-kotlin

    View full-size slide

  24. https://wiki.openjdk.java.net/display/loom/Main

    View full-size slide

  25. https://spring.io/blog/2023/02/27/web-applications-and-project-loom

    View full-size slide

  26. JHipster is Knowledge

    View full-size slide

  27. The JHipster Mini-Book

    Written with Asciidoctor


    Free download from InfoQ:


    infoq.com/minibooks/jhipster-mini-book


    Quick and to the point, 164 pages


    Developed a real world app:


    www.21-points.com


    Buy for $20 or download for FREE

    View full-size slide

  28. Learn More
    stackoverflow.com
    Spring Boot


    spring.io/guides
    JHipster


    www.jhipster.tech
    Auth0


    developer.auth0.com

    View full-size slide

  29. developer.okta.com/blog/tags/java


    @oktadev

    View full-size slide

  30. developer.auth0.com


    @auth0

    View full-size slide

  31. Action: Try JHipster! 🚀
    npm i -g generator-jhipster

    View full-size slide

  32. git clone https://github.com/oktadeveloper/okta-spring-webflux-react-
    example.git
    https://github.com/oktadev/auth0-java-microservices-examples
    Use the Source, Luke!

    View full-size slide

  33. developer.okta.com

    View full-size slide

  34. Thanks!


    Keep in Touch


    raibledesigns.com


    @mraible


    Presentations


    speakerdeck.com/mraible


    Code


    github.com/oktadev
    developer.auth0.com

    View full-size slide