Making certain parts of our architecture event-driven
Proposed
Microservices can communicate synchronously (blocking) and asynchronously (non-blocking). The Hey, Blue! system has to implement several processes that contain consecutive and parallel steps.
We use asynchronous calls between services whenever the calling service can proceed without waiting for the result of the called service. This is usually the case when the processing of the occurring event can be delayed without interrupting the process or hindering the user experience.
The solution architecture has to provide a way to queue messages. While this can be in the responsibility of event-driven services (e.g. the Notification service) we strongly recommend to integrate a dedicated event-streaming platform like Kafka or Azure Event Hub. This ensures a decoupling of services, which generally increases maintainability and expandability of the system. It also provides a solid foundation in case future enhancements plan to leverage event-driven communication.