Once two or more parties have detected their respective conversation partners and negotiated a connection, they can begin the "real" conversation. Frequently, the initial steps of setting up a conversation are handled by the infrastructure or a lower-level protocol, so that this part of the conversation is sometimes called the application-level conversation in contrast to the infrastructure-level conversation, which deals with the aspects of the conversation that are needed, but do not support the conversation partners in exchanging application-level information.
Basic conversations consist of two conversation partners, the service consumer and the service provider. They engage in a variety of conversation patterns, which differ in the following design aspects:
- Unidirectional vs. bidirectional. Some conversations need to transmit information only in one direction, while others need to transmit information back and forth between the conversation partners.
- Asynchronous Messages. Even in bidirectional information exchanges, a conversation partner may not expect to receive unsolicited asynchronous messages, but receives messages only as responses to requests it makes, i.e. synchronously.
- Single or Multi-Message. In the extreme case, a conversation consists only of a single message, while most conversation consist two or any number of messages.
- Explicit vs. Implicit Termination. Some conversations have a natural ending point. For example Request-Response always ends after the response message. Other conversations, such as Subscribe-Notify, keep on exchanging messages until the conversation is explicitly terminated.
- Error Conditions. Simple conversations differ in the way they deal with error conditions. For example, they may retry actions or simply ignore errors.
Pattern | Direction | Asynchronous | Multi-Message | Termination | Error Handling |
Fire-and-Forget | unidirectional | provider | single | implicit | none |
Asynchronous Request-Response | bidirectional | provider | two | implicit | none |
Request-Response with Retry | bidirectional | provider | multiple | implicit | retry |
Polling | bidirectional | provider | multiple | implicit | none |
Subscribe-Notify | bidirectional | consumer & provider | multiple | explicit | none |
Quick Acknowledgment | bidirectional | provider | three | implicit | none |
The conversation patterns in this chapter can stand on their own, but are also frequently combined into larger conversations. As such they form an important vocabulary to more easily describe complex conversations.