Congratulations on completing this chapter, where the skills and knowledge required to build an asynchronous, scalable producer-consumer application were discussed. This chapter started off by explaining what a synchronous application is and what an asynchronous application is.
This chapter also talked about how asynchronous applications can enable decoupling and scalability by using an intermediate queue. We discussed in-memory queues provided out of the box by Java as well as advanced queues such as Apache Kafka that enable fault tolerance, clustering, and scalability while giving high performance.
Furthermore, we explained how to write producers and consumers for Apache Kafka using the Spring Kafka library, which enables acknowledgment of message sending via replies. Spring Kafka does a lot of heavy lifting with auto-configuration so that it is easier to develop.
Subsequently...