A Series of Reactive Programming with Reactor & Spring Boot Webflux (The Road to Backend Developer Edition)

fResult
7 min readNov 3, 2023

--

Here is my first blog post in Spring Boot Webflux using Java which makes me really inspired to start this series.

Preface:

I’m a Frontend Developer who’s enthusiastic about Functional Programming and increasingly curious about Backend development.
I’ve started a journey to explore the world of Reactive Programming.
This series is my personal adventure, driven by my goal to understand the complexities of backend development and unlock the potential of responsive, scalable applications.
To achieve this, I’ve chosen to work with Reactor and Spring Boot WebFlux, using Kotlin.

These technologies enable me to build applications that can handle many tasks at once without slowing down, but they also challenge me to dive into Spring Boot Webflux, Kotlin, and other areas that I’m less familiar with.

I’m Gonna Be King Of Backend Developer!!
- Monkey D. Luffy (never says.) -

I’d like to invite you to join me on this exciting journey.
I’ll share my insights, discoveries, and my deepening understanding of these concepts.
This series is my way of not just writing code but also trying to gain a profound comprehension of the principles behind it.
I believe that this approach will not only help me transition from Frontend to the world of Backend and Reactive Programming but also provide valuable insights for others interested in a similar journey.

Introduction to Reactive Programming.

Reactive Programming is a programming paradigm focused on handling information that comes unexpectedly (asynchronous data streams and events), like messages, sensor data, or user interactions with an application.

These are the fundamental parts of Reactive Programming:

1. Asynchronous Data Streams
Imagine dealing with information that comes to you unexpectedly.
You don’t have to ask for it, like getting notifications on social media or getting SMS without requesting them.

2. Push-Based
In this type of handling data is pushed to you as it’s available, similar to how a notification pops up on your phone without you checking for it.

3. Reactive Stream
A flow of data that’s continuously moving, like data in the river that flows and we can interact with it at any point in that flow.

4. Observable
Like an eye that is watching for changes in any specific type of data.
When there’s a change, we will get notified about it.

5. Data Transformation
Imagine changing the shape or form of information as it flows through the stream. It’s like molding clay into different shapes.

6. Publisher, Subscriber, and Operators
Here are the descriptions for them.

  • Publisher is the source of the data, it emits (or pushes) data to the Subscriber. This can be anything from a server, sensors, or user interactions on any application. The Publisher creates the data flow.
  • Subscriber is you or your application. Normally, it is someone who is ready to receive and handle the arriving data. When the Observable notices a change, it sends the info to the Subscriber.
  • Operators are the tools used to transform, filter, or modify the data in the stream that passes through any operator. (for example map, flatMap, filter.)

Remember, in the reactive paradigm, nothing happens until you call subscribe().
It’s like turning on the engine. So, keep in mind, that everything starts when you say “subscribe”!

Nothing happens until you call “subscribe()”

7. Backpressure
When the data flows in the stream too much and too quickly, backpressure allows you to control the rate of data that you receive and ensure that you will not get overloaded.

8. Composability
This involves combining various operations on data in a way that makes sense and gives you the desired result. Like assembling many data pipes into a long pipeline.

Why Reactor & Spring Boot WebFlux?

As a Frontend Developer eager to expand my skills and start on a journey into the world of backend development and reactive programming, I found Reactor and Spring Boot WebFlux to be enticing choices.

Reactor serves as a foundational element within the Spring ecosystem, complementing Spring Boot seamlessly, and enabling the development of highly responsive and event-driven applications.
Spring Boot WebFlux, with its fully reactive and non-blocking API, perfectly aligns with Reactor, offering the potential to create applications that are not just responsive but also incredibly scalable.

In this series, I’ll take you along my journey as I delve into these technologies, sharing the experiences and discoveries I encounter as I explore the world of reactive programming.
Together, we’ll leverage the power of Kotlin to unlock the potential of Reactor and Spring Boot WebFlux, enabling us to tackle multiple tasks concurrently while maintaining peak performance.

Overview of the series structure.

In this series, we’ll follow a structured path to deep dive into the world of Reactive Programming with Reactor and Spring Boot WebFlux.
The journey is divided into a series of episodes, each building upon the knowledge gained in the previous one.
We’ll start with the fundamentals and gradually progress towards more advanced concepts.
By the end of the series, you’ll have a comprehensive understanding of these technologies and how to apply them effectively.

Update on Dec 3, 2023
Throughout this series, we’ll explore some aspects of this github/gitlab repository that act as a sneak peek into what I’ve recently learned about Reactor, Spring Boot Webflux, and Kotlin. Feel free to check it out!

On GitHub

On Gitlab

Table of contents for upcoming blog posts.

Here’s a sneak peek at what you can expect in the upcoming blog posts of this series:

EP 1: Getting Started with Reactive Programming

  • Introduction to reactive programming concepts
  • Setting up a basic Spring Boot WebFlux project in Kotlin
  • Creating and subscribing to reactive streams

EP 2: Functional Endpoints in Spring Boot WebFlux

  • Building Functional Endpoints without @RestController
  • Defining Routes and Handlers for Different Endpoints
  • Handling Requests and Responses

EP 3: Working with Operators in Reactor

  • Exploring Various Operators like map, filter, flatMap, etc.
  • How to Manipulate Data Within Reactive Streams
  • Hands-on Examples in Kotlin

EP 4: Building Reactive REST APIs with Spring Boot WebFlux

  • Creating REST Endpoints with Spring Boot WebFlux
  • Handling Requests and Responses Using Reactive Streams
  • Data Manipulation with Fake Repository

EP 5: Error Handling and Testing in Reactive Programming

  • Handling Errors and Exceptions in Reactive Streams
  • Writing Unit Tests for Reactive Components
  • Introduction to testing frameworks for reactive code

EP 6: Building a Reactive Microservice with Spring Cloud

  • Introduction to Spring Cloud for Building Microservices
  • Implementing a Reactive Microservice Using Spring Cloud and Spring Boot WebFlux

EP 7: Integrating Reactive Databases with Spring Boot WebFlux

  • Connecting to Reactive Databases (e.g., MongoDB, R2DBC) Using Spring Boot WebFlux
  • Building a Reactive Data Access layer
  • Performing CRUD Operations with Reactive Databases

EP 8: Real-World Examples and Best Practices

  • Real-world Examples of Using Reactor and Spring Boot WebFlux in Production Applications
  • Best practices and Common Pitfalls in Reactive Programming
  • Tips for Optimizing and Scaling Reactive Applications

EP 9: Conclusion and Next Steps

  • Recap of Key Concepts in Reactive Programming and Functional Endpoints
  • Summary of What was Covered in the Series
  • Next Steps for Further Learning and Exploration

Please Note:
As we go through this series, I may adjust some topics if I reallize them too difficult to learn and explain later.
This way, I can make sure the content remains easy to understand.
Your understanding and flexibility are greatly appreciated as we learn together.

Learning these topics can be challenging a lot, and I want to be thorough in explaining them, which might take a little extra time.
Your patience and support are much appreciated as we navigate this learning journey together.

Journey Map:

I will provide the URL links to these contents once they are finished.

Here is my blog post about Spring Boot Webflux which I’ve already started.
You can check out it if you want.

Thanks for reading until the final line.
If you’re confused or have any questions, don’t hesitate to leave the comments.

Feel free to connect with me and stay updated on the latest insights and discussions.
👉 https://linkedin.com/in/fResult 👈

--

--

fResult

ชื่อเล่นว่ากร เขามี background มาจากอาชีพเด็กวิ่งเอกสารในอาคารของธนาคาร โดยเรียนไปด้วยจนจบจากมหาลัยเปิดแห่งหนึ่ง และปัจจุบันทำงานเป็น Web Developer ครับทั่นน