# Synchronous vs. Asynchronous Communication

**In short:** A synchronous call makes the caller wait for the answer. An asynchronous call lets the caller move on. The choice shapes how failures spread and how replies are matched to requests.

## Explanation

A **synchronous** call means the caller sends a request and waits for the reply. An **asynchronous** call means the caller sends the request and carries on. Any reply comes later.

**Synchronous calls and failure**

Any remote call can fail, because the service on the other end may be unavailable. Callers must handle that failure gracefully.

Chained calls make this worse. When service A calls B, and B calls C, downtime multiplies across the chain. There are two ways out: go asynchronous, or manage the downtime. Resilience patterns help with the second option. Examples are Circuit Breaker, Bulkhead and Timeout. The Circuit Breaker article covers one of them.

Cross-service transactions add another problem. They impose temporal coupling, meaning both sides must be available at the same time. This is problematic across several services.

**Asynchronous communication**

A common asynchronous style is messaging over a lightweight message bus. It is an alternative to request/response protocols. The Messaging article explains it.

Asynchronous communication can still produce an answer. Request-Reply sends a pair of messages, each on its own channel. The requestor must then match each reply to its request. A Correlation Identifier does this. Asynchronous callbacks also let several open requests share one reply channel.

## Example

An online shop checks stock, takes payment and books shipping. In a synchronous design, the order service calls each one and waits. If the shipping service is down, the order fails or hangs. In an asynchronous design, the order service posts a message and moves on. The reply carries the order number as a correlation identifier, so the order service knows which order it answers.

## Trade-offs

Synchronous calls expose the caller to the supplier's downtime, and chains of them multiply that downtime. Timeouts, Circuit Breaker and Bulkhead reduce the damage but do not remove it.

Going asynchronous avoids that waiting and lowers temporal coupling. In return, the design needs extra machinery. Replies must be matched to requests, for example with a Correlation Identifier and separate reply channels.

Synchronous call: the caller waits. Asynchronous call: the caller continues and the reply is matched later.

```mermaid
sequenceDiagram
 participant A as Caller
 participant B as Callee
 Note over A,B: Synchronous
 A->>B: request
 B-->>A: reply (caller waited)
 Note over A,B: Asynchronous
 A->>B: request + correlation ID
 A->>A: continues other work
 B-->>A: reply + same correlation ID
```

## Checks

- The document states how each remote call handles an unavailable supplier.
- Long chains of synchronous calls between services are identified, with a stated way to handle their combined downtime.
- Resilience patterns such as Circuit Breaker, Bulkhead or Timeout are named where services communicate.
- Where Request-Reply messaging is used, the document says how replies are matched to requests, for example with a Correlation Identifier.

## Related

- [Synchronous vs Asynchronous Connector](https://arc.fuet.ch/concepts/integration/synchronous-vs-asynchronous-connector.md)
- [Request-Reply](https://arc.fuet.ch/concepts/integration/request-reply.md)
- [Correlation Identifier](https://arc.fuet.ch/concepts/integration/correlation-identifier.md)
- [Messaging](https://arc.fuet.ch/concepts/integration/messaging.md)
- [Circuit Breaker](https://arc.fuet.ch/concepts/tactics/circuit-breaker.md)
- [Remote Procedure Call](https://arc.fuet.ch/concepts/integration/remote-procedure-call.md)
- [Loose Coupling](https://arc.fuet.ch/concepts/principles/loose-coupling.md)
- [Availability](https://arc.fuet.ch/concepts/quality-attributes/availability.md)

## Sources

- [Microservices](https://martinfowler.com/articles/microservices.html) — martinfowler.com, accessed 2026-11-09
- [Request-Reply - Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReply.html) — enterpriseintegrationpatterns.com, accessed 2026-11-09
- [Correlation Identifier - Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/CorrelationIdentifier.html) — enterpriseintegrationpatterns.com, accessed 2026-11-09
