这一节来说说,异步机制及spring对JMS封装
一、消息异步处理
类似于RMI、Hessian、Burlap等远程方法调用,它们都是同步的,所谓同步调用就是客户端必须等待操作完成,如果远程服务没有返回任何响应,客户端会一直等待直到服务完成。
所谓同步:就是客户端必须等待操作完成,如果远程服务没有任何返回响应,客户端会一直等待直到服务完成。
异步调用:客户端发送消息无需等待服务处理完成便可立即返回,就像发送完消息就立刻被处理成功一样。
1.1消息的 发送
异步处理的世界,我们可以把消息发送比作一个邮局系统。我们不必关心邮件如何送出,能否到达,邮局系统会保证邮件最终送达我们希望的接受者手中,点对点 和发布、订阅。
1.1点对点模式
在点对点模式中,每个消息只有一个发送者和一个接受者,
在点对点模型中,每个消息只有一个发送者和一个接收者。如下图所示:
在点对点模型中, 消息broker会把消息放入一个queue。当一个接收者请求下一个消息时,消息会被从queue中取出并传递给接收者。因为消息从queue中取出便会被移除,所以这保证了一个消息只能有一个接收者。
尽管消息队列中的每个消息只有一个接收者,但这并不意味着只能有一个接收者从队列获取消息,可以同时有多个接收者从队列获取消息,只不过它们只能处理各自接收到的消息。其实这就像在银行排队一样,排队的人可以看做一个个消息,而银行工作窗口便是消息的接收者,每个窗口服务完一个客户之后都会让队列中的“下一个”到窗口办理业务。
还有,如果多个接收者监听一个队列,我们是很难确定到底哪个接收者处理哪个消息的。不过这也不一定不好,因为这样就使得我们很方便的通过增加接收者来拓展应用处理能力了。
1.2发布/订阅模式
在发布/订阅模式中,消息是被发送到topic中的。就像queue一样,很多接收者可以监听同一个topic,但是与queue每个消息只传递给一个接收者不同,订阅了同一个topic的所有接收者都会收到消息的拷贝,如下图所示:
从发布/订阅的名字中我们也可看出,发布者发布一条消息,所有订阅者都能收到,这就是发布订阅模式最大的特性。对于发布者来说,它只知道将消息发布到了一个特定的topic,它不关心谁监听这个topic,这也就意味着它并不知道这些消息是被如何处理的。
1.2 异步消息系统带来的好处
在具体介绍异步消息系统带来的好处之前,我们先看看同步系统的局限性:
同步会话意味着等待:当客户的调用远程服务的方法时,客户端必须等待远程方法结束之后才能继续,如果客户端与远程服务交流频繁或者远程服务响应过慢,会影响客户端的性能 客户端和服务接口耦合:如果服务接口发生改变,所有客户的都需要修改 客户端和服务位置耦合:客户端要想使用远程服务就必须配置服务的地址,如果网络拓扑发生变化,客户端需要重新配置服务地址 客户端和服务可用性耦合:如果服务不可用,那么也会导致客户端不可用
下面我们再看一