通信有两类不同的基本方式: 具有依时性的同步方式以及与时间无关的异步方式。消息传送中间件有许多不同类型, 它们分别都能够支持一类基本方式的消息通信, 有时可以支持两类方式。
根据定义, 同步执行的特征为: 在两个通信应用系统之间必须要进行同步, 两个系统必须都在正常运行, 并且会中断客户端的执行流, 转而执行调用。发送程序和接收程序都必须一直做好相互通信的准备。发送程序首先向接收程序发起一个请求(发送消息)。发送程序紧接着就会堵塞它自身的进程, 直到收到接收程序的响应。发送程序在收到响应后会继续向下进行处理。同步方式的请求/响应通信如图2.6所示。在2.4节中, 将讨论同步通信的一个具体实例——远程过程调用。
当使用异步消息传送时, 调用者在发送消息以后可以不用等待响应, 可以接着处理其他任务。对于异步通信, 一个应用程序(请求者或发送者)将请求发送给另一个应用程序, 然后可以继续向下执行它自身的其他任务。发送程序无须等待接收程序的执行和返回结果, 而是可以继续处理其他请求。与同步方式不同, 异步方式中两个应用系统(发送程序和接收程序)无须同时都在运行, 也无须同时都在处理通信任务。
通常使用排队机制来实现异步消息传送。有两种不同类型的排队方式: 存储/转发、 发布/订阅, 在2.5节中将讨论这两类排队方式。
在选择通信方式的类型时, 必须仔细斟酌松耦合接口和紧耦合接口的利弊, 以及异步交互和同步交互的利弊。在下面的两节中, 我们将更详细地讨论这些通信方式。