Message exchange pattern

There are three major ways for a message exchange: Fire-And-Forget, Reply-Response and Request-Callback.


Fire-And-Forget (one-way)
A Client sends a message to a Server without expecting an answer.

|Client|           |Server|
   |---- Message ---->|

Reply-Response (two-way, synchronous)
A Client sends a message to a Server and waits for the response/timeout.
The sending thread gets blocked til the response/timeout occurs.

|Client|           |Server|
   |----  Reply  ---->|
   |<--- Response ----|

Request-Callback (two-way, asynchronous)
A Client sends a message to a Server and waits for the callback/timeout.
The sending thread doesn't get blocked til the callback/timeout occurs.

|Client|           |Server|
   |---- Request ---->|
   |                  |
   |<--- Callback ----|