The messaging primitives we just looked at can be augmented with various functionalities to enable complex architectural patterns. In Chapter 5, Going Distributed, we took a look at the event-driven architecture paradigm. In this this section, we will have a more detailed look at various patterns of integrating components with messaging.
While these patterns can be implemented, in principle, through durable messaging (Kafka, NSQ, and so on), we will use use Golang channel primitives to demonstrate integration patterns.