Communication between a sender and one or more receivers can be synchronous, that is the caller is blocked until one or all responses are returned, or asynchronous where the caller returns immediately after sending the message. In the latter case, the caller has to retrieve the response(s) later and correlate it/them to the request sent (usually using some form of message numbering).