Message-driven

Asynchronous message passing is the base of reactive systems. This helps us to establish boundaries between components and parallelly ensure loose coupling, isolation, and location transparency. If a particular component is not available now, the system should delegate failures as messages. This pattern helps us to enable load management, elasticity, and flow control by controlling the message queues in the system with the option of applying back pressure as and when needed. Non-blocking communication leads to less system overhead. There are many tools available for message passing such as Apache Kafka, Rabbit MQ, Amazon Simple Queue Service, ActiveMQ, Akka, and so on. Different modules of the code interact with each other via message passing. Thinking deeply about the Reactive Manifesto, microservices just seems to be an extension of the Reactive Manifesto.