JMS支持两类消息传送模型:点对点模型(p2p)和发布/订阅模型(Pub/Sub)。发布/订阅模型设计用于一对多(one-to-many)消息广播,而点对点模型则设计用于一对一(one-to-one)消息传送。如图:
从JMS的视角来看,消息传送客户端称为JMS客户端(JMS client),而消息传送系统则称为JMS提供者(JMS provider)。一个JMS应用程序是由多个JMS客户端和(通常是)一个JMS提供者所组成的业务系统。此外,生产消息的JMS客户端称为消息生产者(message producer),而接收消息的JMS客户端则称为消息消费者(message consumer)。一个JMS客户端可以既是消息生产者,又是消息消费者。当我们使用术语消费者(consumer)或生产者(producer)时,我们分别是指消费或生产消息的一个JMS客户端。
点对点模型
点对点消息传送模型允许JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接收消息。在点对点模型中,消息生产者称为发送者(Sender)而消息消费者则称为接收者(receiver)。传统上,点对点模型是一个基于拉取(Pull)或者基于轮询(polling)的消息传送模型,这种模型从队列中请求消息,而不是自动地将消息推送到客户端。点对点消息传送模型的一个突出特点就是:发送到队列的消息被一个而且仅仅一个接收者所接收,即使可能有多个接收者在一个队列中侦听同一消息时,也是如此。
点对点消息传送模型既支持异步“即发即弃”消息传送方式,又支持同步请求/应答消息传送方式。点对点消息传送模型比发布/订阅传送模型具有更强的耦合性,发送者通常会知道消息将被如何使用,而且也会知道谁将接收该消息。另外,点对点模型支持负载均衡,它允许许多个接收者侦听同一队列,并以此来分配负载。
发布/订阅模型
在发布/订阅消息传送模型中,消息会被发布到一个名为主题(topic)的虚拟通道中。消息生产者称为发布者(publisher),而消息消费者则称为订阅者(subseriber)。与点对点模型不同,使用发布/订阅模型发布到一个主题的消息,能够由多个订阅者所接收。有时候,也称这项技术为广播(broadcasting)消息。每个订阅者都会接收到每条消息的一个副本。总的来说,发布/订阅消息传送模型基本上是一个基于推送(push)的模型,其中消息自动地向消费者广播,它们无须请求或轮询主题来获取新消息。
发布/订阅模型的去耦能力要比p2p模型更强,消息发布者通常不会意识到有多少订阅者或那些订阅者如何处理这些消息。