mcpField
W
webflux-reactive-patterns

webflux-reactive-patterns

github.com/rrezartprebrezaDevelopment32842 installsUpdated 6d ago
Repository

About webflux-reactive-patterns

A practical skill for developers building reactive services with Spring WebFlux and Reactor. It covers request pipelines, context, persistence, and testing, with guidance on blocking work, backpressure, and cancellation.

Key features

  1. 01Mono and Flux request-handling rules
  2. 02Blocking-work isolation and timeouts
  3. 03Reactor Context and error handling
  4. 04R2DBC, concurrency, and backpressure
  5. 05StepVerifier and WebTestClient testing

Use cases

  1. 01Designing non-blocking WebFlux request flows
  2. 02Keeping blocking calls off event loops
  3. 03Testing cancellation, timeouts, and backpressure

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/rrezartprebreza/spring-boot-skills --skill webflux-reactive-patterns

After installing, type/webflux-reactive-patternsin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

agents/
openai.yaml
examples/
good-reactive-service.java
bad-reactive-service.java

Details

From the project README

WebFlux Reactive Patterns

Use WebFlux when the complete request path benefits from non-blocking I/O.

Dependencies and pipeline rules

  • Use the dedicated Boot 4 WebFlux and WebFlux test starters.
  • Return Mono or Flux; never call subscribe() in request-handling code.
  • Choose flatMap, concatMap, or sequential composition according to ordering needs.
  • Keep JDBC, filesystem, and blocking SDK calls off Reactor event loops.
  • Isolate unavoidable blocking work on boundedElastic at the adapter boundary.
  • Apply timeouts to external calls and preserve cancellation.

Context and errors

  • Put request-scoped metadata in Reactor Context, not ThreadLocal.
  • Configure observability context propagation deliberately.
  • Translate domain failures centrally without swallowing cancellation.
  • Use onErrorResume only for a defined fallback and avoid onErrorContinue.

Persistence and streaming

  • Use R2DBC for reactive database access.
  • Bound fan-out concurrency according to downstream capacity.
  • Define backpressure, buffering, and maximum in-memory sizes.
  • Never collect an unbounded stream solely to simplify downstream code.

Testing

  • Use StepVerifier for publisher behavior and WebTestClient for contracts.
  • Test cancellation, timeout, empty results, errors, ordering, and backpressure.
  • Detect blocking calls in tests when practical.

Examples

  • See examples/good-reactive-service.java and examples/bad-reactive-service.java.

Official sources

Gotchas

  • Agent adds MVC and WebFlux starters accidentally - choose the intended web stack.
  • Agent calls block() or subscribe() in application flow - keep subscription with the runtime.
  • Agent uses ThreadLocal for tenant or trace data - use Reactor Context.
  • Agent uses unbounded flatMap - set concurrency from downstream limits.
  • Agent wraps JDBC with Mono.just - this still blocks the event loop.

Comments

Markdown supported