8.1. The case for messaging, EDA, and microservices8.1.1. Using synchronous request-response approach to communicate state change8.1.2. Using messaging to communicate state changes between services8.1.3. Downsides of a messaging architecture8.2. Introducing Spring Cloud Stream8.2.1. The Spring Cloud Stream architecture8.3. Writing a simple message producer and consumer8.3.1. Writing the message producer in the organization service8.3.2. Writing the message consumer in the licensing service8.3.3. Seeing the message service in action8.4. A Spring Cloud Stream use case: distributed caching8.4.1. Using Redis to cache lookups8.4.2. Defining custom channels8.4.3. Bringing it all together: clearing the cache when a message is received8.5. Summary