异构集成(heterogeneous integration)是消息传送机制在其中起关键作用的一个领域。无论它的成因是合并、并购、业务需求,或者仅仅是技术方向上的一个变化,越来越多的公司都正面临着在企业内部、跨企业集成异构系统和应用程序的问题。
消息传送机制还具有异步处理请求的能力,它为系统体系机构师和开发者提供的解决方案,能够减轻或消除系统瓶颈,并提高最终用户的生产率和系统的整体可伸缩性。由于消息传送机制能够实现组件之间的高度去耦,因此,使用这种机制的系统还具有高度的体系结构灵活性和敏捷性。
通过使用面向消息的中间件,消息通过网络从一个应用程序传送到另一个应用程序之中。企业中间件产品能够确保消息在应用程序中间的正确分发。此外,对于那些需要可靠地大量交换消息的企业,这些产品通常为它们提供了容错和负载均衡、可伸缩性和事务性的支持。
MS支持两类消息传送模型:点对点模型和发布/订阅模型。有称这些消息传送模型为消息传送域。点对点消息传送模型和发布/订阅消息传送模型经常分别缩写p2p和Pub/Sub。
发布/订阅模型设计用于一对多(one-to-many)消息广播,而点对点模型则设计用于一对一(one-to-one)消息传送。如下图
点对点消息传送模型允许JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接受消息。在点对点模型中,消息生产者称为发送者(Sender),而消息消费 者则称为接受者(receiver)。点对点消息传送模型的一个突出特点就是:发送到队列的消息被一个而且仅仅一个接受者所接受,即使可能由多个接受者在同一个队列中侦听统一消息是,也是如此。
点对点消息传送模型即支持异步“即发即弃(fire and forget)”消息传送方式,又支持同步请求/应答消息传送方式。点对点消息传送模型比发布/订阅型具有更强的耦合性,发送者通常会知道消息将被如何使用,而且也会知道谁将接受该消息。
点对点模型支持负载均衡,它允许多个接受者侦听同一队列,并以此来分配负载。如图1-4所示,JMS提供者者负责管理队列,确保每条消息被组内下一个可用的接受者消费以此,而且仅仅一次。
在发布/订阅模型中,消息会被发布到一个名为主题的虚拟通道中。消息生产者称为发布者(publisher),而消息消费者称为订阅者(subscriber)。与点对点模型不同,使用发布/订阅模型发布到一个主题的消息,能够由多个订阅者所接受。有时候,也称这项技术为广播(broadcasting)消息。每个订阅者都会接受到每条消息的一个副本。总地来说,发布/订阅消息传送模型基本上是一个基于(push)的模型,其中消息自动地消息者广播,他们无须请求或轮询主题来获得新消息。
发布/订阅模型的去耦能力要比p2p模型更强,消息发布者通常不会意识到有多少个订阅者或那些订阅者如何处理这些消息。
在发布/订阅消息传送模型内部,有多种不同类型的订阅者。非持久订阅者是临时订阅类型,它们只是在主动侦听主题时才接受消息。而另一方面,持久订阅者将接受到发布的每条消息的一个副本,即便在发布消息,它们处于“离线”状态时也是如此。
JMS自身并不是一种消息传送系统;它是消息传送客户端和消息传送系统通信是所需接口和类的一个抽象。与JDBC抽象访问数据库、JNDI抽象访问命名和目录服务的方式一样,JMS抽象可以访问消息提供者。使用JMS,应用程序的消息传送客户端可以实现跨消息服务器产品的移植。
JMS API可以分为3个主要部分:公共API、点对点API和发布/订阅API。在JMS1.1中,公共API可被用于向一个队列或一个主题发布消息,或从其中接受消息。点对点API专门用于使用队列的消息传送,而发布/订阅API则专门用于使用主题的消息传送。
在JMS功能API内部,和发布和接受JMS消息有关的JMS API接口主要有7个:
- ConnectionFactory
- Destination
- Connection
- Session
- Message
- MessageProducer
- MessageConsumer
在这些公共的接口中,ConnectionFactory和Destination必须使用JNDI从提供者处获得。其他接口则可以通过工厂方法在不同的API接口中创建。这7个主要的JMS公共API接口之间的关系如下图:
点对点消息传送模型API特指JMS API之内基于队列的接口。下面是用于向一个队列发送和从一个队列接受消息的接口:
*QueueConnectionFactory
* Queue
* QueueConnection
* QueueSession
* Message
* QueueSender
* QueueReceiver
与在JMS公共API中一样,QueueConnectionFactory和Queue对象必须通过JNDI从JMS提供者处获得。大多数接口名称仅仅是在公共API接口名称之前添加Queue一词而已。下图显示了基于队列的JMS API接口之间的流程和关系。
发布/订阅消息传送模型内部使用的接口如下:
*TopicConnectionFactory
* Topic
* TopicConnection
* TopicSession
* Message
* TopicPublisher
* TopicSubscriber下图是基于主题的JMS API接口的关系和流程:
消息传送机制的一个基本思想就是:规定应用程序之间的同行应该采用异步方式。将各部分之间连接在一起的代码会假定这是一条单向消息,它不需要立即从另一个应用程序那里得到响应。一旦一条消息被发出,消息传送客户端就能够转向其他任务,他不必等待对这条消息的响应。这是RPC和异步消息传送之间的主要区别,而且,它对于理解消息传送系统的优点来说至关重要。
在一个异步消息传送系统当中,每个子系统都不存在和其他系统的耦合。下图是典型的架构:
原文地址:http://blog.csdn.net/caidaoqq/article/details/45619027