A reactive system is a distributed system designed to remain responsive under demand and failure. It combines responsiveness, resiliency, elasticity, and asynchronous message passing. In microservices, message-driven communication lets services exchange information without blocking threads or coupling their implementations too closely. section 9.2 section 9.0
Its properties reinforce one another:
- Responsiveness handles user requests in a timely fashion and includes identifying and dealing with failures. section 9.2
- Resiliency keeps the system responsive during failures through isolated, highly available services and fast transitions to backups. section 9.2
- Elasticity scales service instances horizontally up or down according to demand, including scaling services down when unused. section 9.2
- Message-driven communication provides asynchronous service interactions that support the other properties. section 9.0 section 9.2
In Quarkus, MicroProfile Reactive Messaging supplies a unified API for propagating asynchronous messages between services. Connectors integrate that API with messaging providers, while Reactive Streams and Mutiny support reactive pipelines. section 9.0 section 9.9
Car-rental services
A Billing service communicates asynchronously with a Reservation service through RabbitMQ using AMQP 0-9-1 and exchanges messages with a Rental service through Apache Kafka. In Quarkus, a reactive connection can be assembled with @Incoming and @Outgoing, configuration, and Dev Services. section 9.9
Use the architecture figure to relate responsiveness, resiliency, elasticity, and message-driven communication. section 9.2
