Introduction to Project Reactor
Course Content
0 / 114 completedPrerequisites
Course Introduction
Why Reactive Programming - Part 2
Why Reactive Programming - Part 1
What is Reactive Programming
Introduction to Reactive Streams
Non-Blocking(Reactive) RestFul API using Spring WebFlux
Introduction to Spring WebFlux
What are we going to build in this Course
Introduction to Project Reactor
Reactor Reactive Types - Flux and Mono
Project SetUp
first-flux
Let's write our very first Flux
Let's write our very first Mono
Reactive Stream Events
Transforming Data Using Operators in Project Reactor
Testing Flux using JUnit5
Reactive Streams are Immutable
Transform using map() Operator
Filter using filter() Operator
Advanced transform using the concatMap() Operator
Asynchronous Operations using flatMap() Operator
Advanced transform using the flatMap() Operator
flatMapMany( ) operator in Mono
Transform using the transform() Operator
Introduction to Combining Reactive Streams
Handling empty data using defaultIfEmpty and switchIfEmpty() Operators
Combining Reactive Streams using merge() and mergeWith() Operators
Combining Reactive Streams using concat and concatWith Operator
flatMap( ) operator in Mono
Combining Reactive Streams using mergeSequential() operator
Combining Reactive Streams using zip and zipWith() Operator
Build a simple Non Blocking API - Mono
Build a Simple Non Blocking API - Flux
Build Infinite Streams API (SSE)
Introduction to Automated Tests
Testing Spring Webflux Endpoint using@WebFlux Test Annotation
JUnit Test for the Mono Endpoint
JUnit Test Streaming Endpoint - SSE
Different Approaches of Testing an Endpoint
Set up the MovieInfo Document
Configure the ReactiveMongoDB Repository for MovieInfo Document
Configure the Mongo DB server details in the application.yml file
Setup the Integration Test using @DataMongoTest
Write Integration Test for findById() MovieInfo Document
Write Integration Test for saving the MovieInfo Document
Write Integration Test for updating the MovieInfo Document
Write Integration Test for findAll() MovieInfo Document
Write Integration Test for deleting the MovieInfo Document
Build a GET Endpoint to get all the MoviesInfo
Build a POST endpoint to create a new MovieInfo
Integration Test for the POST end point using JUnit5
Build a GET Endpoint to retrieve a MovieInfo by ID
Build the DELETE endpoint to delete a MovieInfo by ID
Build a PUT Endpoint to update a MovieInfo by ID
Setting up the UnitTest in WebFlux
Unit Test for the create MovieInfo Endpoint - POST
Unit Test for GetAllMovieInfos endpoint - GET
Unit Test for the update MovieInfo Endpoint - PUT
Bean Validation for List Field using @NotBlank Annotation
Bean Validation for Name,Year with @NotBlank and @Positive Annotation Validators
Customize the Default Error handling using ControllerAdvice
Using ResponseEntity to dynamically change the Response Status
Need for ResponseEntity in Spring WebFlux
Implement a Custom Query to retrieve MovieInfo by Year
GET Endpoint to retrieve a MovieInfo by Year - Using @RequestParam
How does Netty handle the Request
How Netty works with Spring Webflux
Introduction to Functional Web
Build a simple RestFul API using Functional Web
Set up the Repository Class for the Review Document
Write Integration test for creating a new Review
Build the POST endpoint for creating a new Review
Nesting Endpoints using nest() Function
Build the GET endpoint for retrieving all the Reviews
Build the PUT endpoint for updating an existing Review
Build the DELETE endpoint for deleting an existing Review
Build the GET endpoint to retrieve reviews for a given MovieInfoId
Setting up Test Class for Unit Testing
Unit Test the POST endpoint for creating a new Review
Adding the Constraint AnnotationMessages in the Review Document
Unit Testing Bean Validation
Validating the Bean using the Validator
Resource NotFound(404) in Update Review using GlobalErrorHandler
Resource Not Found(404) in Update Review - Alternate Approach
Overview of the Application
Setting Up the Controller in MoviesService
Introduction to Spring WebClient & Configure WebClient
Build the NonBlocking REST Client for ReviewService using Spring WebClient
Build the NonBlocking REST Client for MovieInfoService using Spring WebClient
Combine the MoviesInfoRestClient and ReviewRestClient
Implement the GlobalErrorHandler in Functional Web
Network Exceptions in Service to Service Communications
Implement the 4XX and 5XX error handling in ReviewsClient
Handling 4XX in MoviesInfoService in WebClient
Handling 5xx in MoviesInfoService in WebClient
Introduction to WireMock
SetUp Wiremock in Integration Tests
Stubs for MoviesInfoService and ReviewService
Simulate 4xx Errors in Wiremock
Simulate 5xx Errors in Wiremock
Why Retry failed HTTP calls
Retry failed Http calls using retrySpec() - With BackOff before Retry Attempt
Reusing the retry logic across different Rest Clients
Retry failed Http calls using retrySpec() - Retrying Specific Exceptions
Retry failed Http calls using retry()
Catching up on Server Sent Events (SSE)
Sinks - Hands On
Integration Test for the Streaming Endpoint
Introduction to Sinks
Build a Streaming Endpoint in MoviesInfoService
Build a Streaming Endpoint in MoviesReviewService
Build a Streaming Client using WebClent in MoviesService