Event-based and message-passing are two broad categories of architectural patterns for communication between components in distributed systems. Event-based systems use events to trigger callbacks while message-passing systems explicitly send messages between processes. Common messaging systems like ØMQ and Kafka support both synchronous request-reply and asynchronous publish-subscribe interaction through message queues. These message-oriented middleware platforms provide reliability, scalability and loose coupling between producers and consumers.