Services communicate either synchronously (request/response over REST or gRPC) or asynchronously (messages/events through a broker like Kafka or RabbitMQ).
Synchronous (request/response)
The caller waits for a reply. Simple and intuitive, but it couples availability — if the callee is down, the caller is affected.
GET /orders/42 HTTP/1.1
Host: orders-service
Accept: application/json
Asynchronous (messaging/events)
The sender publishes a message and moves on; consumers process it later. This decouples services in time.
Order Service ──publish "OrderPlaced"──▶ [ Broker ] ──▶ Email Service
│
└──▶ Inventory Service
