Já falamos sobre Reactor em edições anteriores do Radar, e ele continua a ganhar popularidade em muitos de nossos projetos. Com o ecossistema Spring suportando Reactor, a biblioteca se tornou a implementação principal de Reactive Streams. Sistemas reativos trazem escalabilidade melhorada e resiliência, mas com custo aumentado de depuração e uma curva de aprendizado mais acentuada. Para projetos em que essa troca é aceitável, Reactor tem provado ser uma boa escolha. Alguns de nossos projetos observaram melhoras significativas em escalabilidade uma vez que foram movidos para Reactor e o resto da stack reativa. Com R2DBC, estamos começando a ter suporte reativo para drivers RDBMS, que resolve uma das fraquezas dos serviços reativos.
Reactor is a library for building non-blocking applications on the JVM — version 8 and above — based on the Reactive Streams specification. Reactive programming emphasizes moving from imperative logic to asynchronous, non-blocking and functional style code, especially when dealing with external resources. Reactor implements the reactive stream specification and provides two publisher APIs — Flux (0 to N elements) and Mono (0 or 1 element) — to effectively model push-based stream processing. Reactor project is well suited for microservices architecture and offers back pressure–ready network engines for HTTP, WebSockets, TCP and UDP traffic.