欢迎来到天天文库
浏览记录
ID:1354716
大小:56.89 KB
页数:22页
时间:2017-11-10
《activemq开发手册》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.背景当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。面向消息的中间件(MessageOrientedMiddleware,MOM)较好的解决了以上问题。发送者将消息发送
2、给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,1)发送和接收是异步的,发送者无需等待;2)二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;3)一对多通信:对于一个消息可以有多个接收者。已有的MOM系统包括IBM的MQSeries、Microsoft的MSMQ和BEA的MessageQ等。由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。JavaMessageService(JMS)是SUN提出的旨在统一各种MOM系统接口的规范,它包含点对点(PointtoP
3、oint,PTP)和发布/订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。2.JMS概述2.1JMS规范JAVA消息服务(JMS)定义了Java中访问消息中间件的接口。JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为JMSProvider,例如ActiveMQ。2.2术语JMSProvider:实现JMS接口的消息中间件(provider:供应者);PTP:PointtoPoint,即点对点的消息模型;Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;
4、Queue:队列目标;Topic:主题目标;Transaction:事务。ConnectionFactory:连接工厂,JMS用它创建连接;Connection:JMS客户端到JMSProvider的连接;Destination:消息的目的地;Acknowledge:签收;Session:会话,一个发送或接收消息的线程;MessageProducer:由Session对象创建的用来发送消息的对象;MessageConsumer:由Session对象创建的用来接收消息的对象;2.3JMS编程模型在JMS编程模型中,JMS客户端(组件或应用程序)通过JMS消
5、息服务交换消息。消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息。这些消息传送操作是使用一组实现JMS应用编程接口(API)的对象(由JMSProvide提供)来执行的。在JMS编程模型中,JMS客户端使用ConnectionFactory对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行。Connection是客户端与消息服务的活动连接。创建连接时,将分配通信资源以及验证客户端。这是一个相当重要的对象,大多数客户端均使用一个连接来进行所有的消息传送。连接用于创建会话。Session是一个用于生成和使用消息的
6、单线程上下文。它用于创建发送的生产者和接收消息的消费者,并为所发送的消息定义发送顺序。会话通过大量确认选项或通过事务来支持可靠传送。客户端使用MessageProducer向指定的物理目标(在API中表示为目标身份对象)发送消息。生产者可指定一个默认传送模式(持久性消息与非持久性消息)、优先级和有效期值,以控制生产者向物理目标发送的所有消息。同样,客户端使用MessageConsumer对象从指定的物理目标(在API中表示为目标对象)接收消息。消费者可使用消息选择器,借助它,消息服务可以只向消费者发送与选择标准匹配的那些消息。消费者可以支持同步或异步消息
7、接收。异步使用可通过向消费者注册MessageListener来实现。当会话线程调用MessageListener对象的onMessage()方法时,客户端将使用消息。2.4JMS编程域JMS支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布/订阅模型),分别称作:PTPDomain和Pub/SubDomain。PTP(使用Queue即队列目标)消息从一个生产者传送至一个消费者。在此传送模型中,目标是一个队列。消息首先被传送至队列目标,然后根据队列传送策略,从该队列将消息传送至向此队列进行注册的某一个消费者,一次只传送一条消息
8、。可以向队列目标发送消息的生产者的数量没有限制,但每条消息只能发送至、并由一个消
此文档下载收益归作者所有