Flux and Mono in Reactive Programming

a man and a woman using their laptop in a bar
Reading Time: 3 minutes

Reactive Programming

Reactive programming is a popular paradigm for developing applications that handle asynchronous data streams. It offers a powerful and concise way to handle complex data flows with ease. Two important concepts in reactive programming are Flux and Mono, which are part of the Reactor library developed by Pivotal.

Flux

Flux is a type that represents a stream of data that emits zero or more items. It is a publisher of a sequence of elements and can emit data synchronously or asynchronously. A Flux can be created from a variety of sources such as an array, an iterable, or even a database query.

Example of Flux

Flux<String> flux = Flux.just("apple", "banana", "orange");

flux
  .filter(fruit -> fruit.length() > 5)
  .map(String::toUpperCase)
  .subscribe(System.out::println);

In this example, we create a Flux that emits three strings: “apple”, “banana”, and “orange”. We then apply the filter operator to only emit strings that are longer than 5 characters, and the map operator to convert the strings to uppercase. Finally, we subscribe to the data stream and print each element to the console.

Features of Flux

  • Backpressure: Flux supports backpressure, which means it can handle situations where the data source is producing data faster than the subscriber can consume it. Backpressure is important because it helps prevent memory leaks and other performance issues that can arise when a data stream is not properly managed.
  • Hot and Cold Publishers: Flux can be either hot or cold. A cold publisher is one that emits the same sequence of data to all subscribers, while a hot publisher is one that emits data independently to each subscriber. This is an important distinction because it can affect how the data stream is processed and managed.
  • Error Handling: Flux provides several operators for handling errors in the data stream, such as onErrorResume and onErrorReturn. These operators allow you to define a fallback strategy in case an error occurs in the data stream.

Mono

Mono is a type that represents a stream of data that emits zero or one item. It is similar to Flux, but it is optimized for handling single values. Monos can be created from a variety of sources, just like Flux.

Example of Mono

Mono<String> mono = Mono.just("apple");

mono
  .map(fruit -> fruit + " pie")
  .doOnNext(System.out::println)
  .subscribe();

In this example, we create a Mono that emits a single string: “apple”. We then apply the map operator to append the string ” pie” to the value, and the doOnNext operator to print the result to the console. Finally, we subscribe to the data stream without providing a subscriber, which means we’re just interested in executing the operators.

Features of Mono

  • Laziness: Mono is a lazy publisher, which means it only starts emitting data when it has at least one subscriber. This is an important feature because it can help optimize performance by delaying the creation of resources until they are actually needed.
  • Error Handling: Mono provides several operators for handling errors, such as onErrorResume and onErrorReturn. These operators work in the same way as they do in Flux.
  • Combining Operators: Mono provides several operators for combining multiple Monos into a single Mono. These operators include zip, flatMap, and concat.

Conclusion

Flux and Mono are powerful and flexible types that allow you to handle asynchronous data streams and single values with ease. They provide a rich set of operators for manipulating and processing data and are optimized for performance and resource management. Whether you’re working with events, messages, or any other type of asynchronous data, Flux and Mono are essential tools for any reactive programming project.

For a more technical blog, you can refer to the Knoldus blog: https://blog.knoldus.com/

Written by 

Mohd Uzair is a Software intern at Knoldus. He is passionate about java programming. He is recognized as a good team player, a dedicated and responsible professional, and a technology enthusiast. He is a quick learner & curious to learn new technologies. His hobbies include watching movies, surfing youtube, playing video games.

Discover more from Knoldus Blogs

Subscribe now to keep reading and get access to the full archive.

Continue reading