From Web to Flux: Tackling the Challenges of Reactive Programming By Victor Rentea

Поділитися
Вставка
  • Опубліковано 2 жов 2023
  • Ready for a deep dive into the world's most challenging programming paradigm? Reactive programming can simplify asynchronous and event-driven applications, but without a strong understanding, it can lead to frustration, recurring patchwork, missed deadlines, and costly bugs.
    In this intensive three-hour session, we'll transition a traditional Spring application to WebFlux, revealing patterns and anti-patterns when working with repositories, REST APIs, queues, and legacy libraries. You'll gain a clear understanding of often overlooked but critical aspects like subscribe signal, errors, cancellation, and signal loss. As a bonus, we'll debate the future of Reactive vs Virtual Threads, production-ready in Java 21.
    This session is crucial for developers already working with reactive programming or those intending to make the leap.
    VICTOR RENTEA
    Victor is a Java Champion with two decades of experience, passionate about architecture, refactoring, and unit testing. He’s the founder of the world’s largest developer community on these topics: European Software Crafters. Today Victor helps companies throughout Europe raise the bar via consultancy and intense training workshops. You can find dozens of past conference talks, a blog, and his training offer on victorrentea.ro
  • Наука та технологія

КОМЕНТАРІ • 32

  • @aksh1618
    @aksh1618 7 місяців тому +11

    What a showman 🙌🏼 I have never had this much fun with anything related to reactive programming!

  • @tendaipfidze7933
    @tendaipfidze7933 2 дні тому

    Had almost given up on reactive until this guy showed up 👏👏

  • @zerocoolys
    @zerocoolys 6 місяців тому +3

    The best talk about reactive programming that I had ever watched, with case by case.

  • @zvejkal2
    @zvejkal2 13 днів тому

    Great performance and presentation style. I really enjoyed it!

  • @harshadkumarshrishrimal1728
    @harshadkumarshrishrimal1728 5 місяців тому +3

    Very well done presentation. Thank you.

  • @hokagetn5181
    @hokagetn5181 8 місяців тому +7

    Best video on reactive webflux

  • @JorisOosterhuis
    @JorisOosterhuis 7 місяців тому +4

    Amazing talk. It helped me grasp some of the concepts of reactive i had not understood till now. Thanks!

  • @10xtenx10xtenx10xten
    @10xtenx10xtenx10xten 6 місяців тому +4

    Does anyone know what tool he is using to all the arrows?
    Edit: It's ScreenBrush app for Mac.

  • @RaghavSharma2211
    @RaghavSharma2211 7 місяців тому +2

    Love the way you teaches us!

  • @user-qn3iz8qd6d
    @user-qn3iz8qd6d 7 місяців тому +3

    Thanks for the awesome content and what an engaging and entertaining talk!!

  • @goldie75c
    @goldie75c 8 місяців тому +3

    Project Loom equivalent presentation would be interesting to compare 😇

  • @Tenesh45
    @Tenesh45 6 місяців тому

    Very good explanations and I really liked playing the right sounds at the right time 😂

  • @prabhatism
    @prabhatism 7 місяців тому +1

    1:39:31 i wasn't ready for it! xD

  • @simonmassey8850
    @simonmassey8850 2 місяці тому

    I have literally been through this whole learning curve with some folks how had not programmed in scala as I had. It was complete carnage 😂

  • @shane-kung
    @shane-kung 3 місяці тому +1

    any chance sharing the repo?

  • @pnadmin7927
    @pnadmin7927 Місяць тому

    amazing!!!

  • @MrOcelot92
    @MrOcelot92 20 днів тому

    1:50:50 isn't row 50 Mono too? why there is no need to add a return something there too?

    • @timcsq
      @timcsq 13 днів тому

      delayUntil subscribes to the inner code but returns the original item, which is the saved post from line 43 in this case. You can think of it like it's a procedure which executes its body, but then returns its argument (something like "Long myProc(Long arg) { return arg }"). That's why you can map this saved post into a Long using getId and return that ID as Mono.

  • @lukasz-cpu2416
    @lukasz-cpu2416 5 місяців тому +2

    Reactive programming is cool for the kind of tasks you show in your presentation like CRUD operations. When it comes to projects where we have a very complex business domain, there are many different exceptions, rules, checks and so on reactive code becomes harder and harder to maintain. We have a situation where we have pipelines of 10 lines each with a Map/FlatMap for example. Not to mention how to diagnose the error in production or performance issue. I don't wish this on anyone. In summary, reactive programming is cool for easy applications, building data transfers but nothing more. Peace

    • @TJ-hs1qm
      @TJ-hs1qm 4 місяці тому

      how? if every function is total combining those will give a total function. To better understand performance pure functions can be compared to imperative style coding using local mutable state, ex. for-loops instead of recursion. And due to referential transparency different coding styles may be mixed as long as they stay pure and total.

  • @avalagum7957
    @avalagum7957 7 місяців тому +1

    If your machine cannot process data coming to it fast enough, then you use reactive to tell the data producer to slow down. Does that mean the data producer has some way to hold the data? Does that mean that instead of holding the data in our machine to gradually process it, we hold the data in the data producing machine to gradually release it? Does that mean we only move our issue from this machine to another machine?

    • @aksh1618
      @aksh1618 7 місяців тому +1

      The idea is to have an end-to-end reactive chain, where each part takes care of their responsibility, until the final publisher. So if you're using a mongodb reactive driver as the final publisher, it can take care of the "tough" job of how to handle backpressure, and the intermediate producers and consumers just have to take care of propagating it to the source. So the "issue" keeps getting propagated till it becomes mongodb's issue, which knows how to deal with it. (Disclaimer: This is a very simplistic view for the sake of a direction towards the answer.)

    • @phanvanhoa
      @phanvanhoa 6 місяців тому

      Ideally, the producers produce, the consumers consume. Typically there's a buffer in the middle ( databases, message queues, kafka topics, ... etc).

    • @avalagum7957
      @avalagum7957 6 місяців тому +1

      @@phanvanhoa if I'm getting data from a database, how can I tell the db to give me data slowly enough so that I can consume it without using reactive?

  • @alphanarslan7390
    @alphanarslan7390 7 місяців тому

    awesome

  • @timcsq
    @timcsq 13 днів тому

    Impressive as it is, Virtual Threads make 99% of it obsolete.

  • @joaoandrade4239
    @joaoandrade4239 Місяць тому

    Java 21, the Reactive webflux Killer?

  • @TheMrDrakiula
    @TheMrDrakiula 6 місяців тому +6

    Lord have mercy on those that have to read and maintain this kind of code, not to mention those that are new to this kind of project. Just horror and nightmares. Luckily there are other ways in the world.

    • @MakeItStik
      @MakeItStik 5 місяців тому +1

      I have read and maintaining such application. What are the other ways you suggest ?

    • @simonmassey8850
      @simonmassey8850 2 місяці тому

      Tomorrow Java 22 comes out with the 2nd preview version of “structured concurrency” where you can write blocking code with 1,000,000 virtual threads and clear stack traces. Then you can write obvious code that scales without it needing to use a reactive framework that must do complex things to juggle traditional threads.