ActiveMQ总结.doc

上传人:hw****26 文档编号:3526000 上传时间:2019-06-02 格式:DOC 页数:53 大小:378KB
下载 相关 举报
ActiveMQ总结.doc_第1页
第1页 / 共53页
ActiveMQ总结.doc_第2页
第2页 / 共53页
ActiveMQ总结.doc_第3页
第3页 / 共53页
ActiveMQ总结.doc_第4页
第4页 / 共53页
ActiveMQ总结.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、1. 背景 当前,CORBA 、DCOM、RMI 等 RPC 中间件技术已广泛应用于各个领域。但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2 )客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程 都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。 面向消息的中间件(Message Oriented Middleware,MOM)较好的解决了以上问题。发送者将消息发送给消息服务器,消息

2、服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行; 一对多通信:对于一个消息可以有多个接收者。 已有的 MOM 系统包括 IBM 的 MQSeries、Microsoft 的 MSMQ 和 BEA 的MessageQ 等。由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。Java Message Service(JMS)是 SUN 提出的旨在统一各种 MOM 系统接口的规范,它包含点对点(Point to Point,PTP )和发布/

3、订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。2JMS 概述2.1 JMS 规范JAVA 消息服务(JMS)定义了 Java 中访问消息中间件的接口。JMS 只是接口,并没有给予实现,实现 JMS 接口的消息中间件称为 JMS Provider,例如ActiveMQ。2.2 术语 JMS Provider:实现 JMS 接口的消息中间件;PTP: Point to Point,即点对点的消息模型; Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;Queue:队列目标;Topic:主题目标;Connec

4、tionFactory:连接工厂, JMS 用它创建连接;Connection:JMS 客户端到 JMS Provider 的连接;Destination:消息的目的地;Session:会话,一个发送或接收消息的线程;MessageProducer:由 Session 对象创建的用来发送消息的对象;MessageConsumer:由 Session 对象创建的用来接收消息的对象;Acknowledge:签收;Transaction:事务。2.3 JMS 编程模型在 JMS 编程模型中,JMS 客户端(组件或应用程序)通过 JMS 消息服务交换消息。消息生产者将消息发送至消息服务,消息消费者则从

5、消息服务接收这些消息。这些消息传送操作是使用一组实现 JMS 应用编程接口 (API) 的对象(由 JMS Provide 提供)来执行的。在 JMS 编程模型中,JMS 客户端使用 ConnectionFactory 对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行。Connection 是客户端与消息服务的活动连接。创建连接时,将分配通信资源以及验证客户端。这是一个相当重要的对象,大多数客户端均使用一个连接来进行所有的消息传送。连接用于创建会话。Session 是一个用于生成和使用消息的单线程上下文。它用于创建发送的生产者和接收消息的消费者,并为所发送的消息定

6、义发送顺序。会话通过大量确认选项或通过事务来支持可靠传送。客户端使用 MessageProducer 向指定的物理目标(在 API 中表示为目标身份对象)发送消息。生产者可指定一个默认传送模式(持久性消息与非持久性消息) 、优先级和有效期值,以控制生产者向物理目标发送的所有消息。同样,客户端使用 MessageConsumer 对象从指定的物理目标(在 API 中表示为目标对象)接收消息。消费者可使用消息选择器,借助它,消息服务可以只向消费者发送与选择标准匹配的那些消息。消费者可以支持同步或异步消息接收。异步使用可通过向消费者注册 MessageListener 来实现。当会话线程调用 Mes

7、sageListener 对象的 onMessage 方法时,客户端将使用消息。2.4 JMS 编程域JMS 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布/订阅模型) ,分别称作:PTP Domain 和 Pub/Sub Domain。PTP(使用 Queue 即队列目标) 消息从一个生产者传送至一个消费者。在此传送模型中,目标是一个队列。消息首先被传送至队列目标,然后根据队列传送策略,从该队列将消息传送至向此队列进行注册的某一个消费者,一次只传送一条消息。可以向队列目标发送消息的生产者的数量没有限制,但每条消息只能发送至、并由一个消费者成功使用。如果没有已经

8、向队列目标注册的消费者,队列将保留它收到的消息,并在某个消费者向该队列进行注册时将消息传送给该消费者。Pub/Sub(使用 Topic 即主题目标) 消息从一个生产者传送至任意数量的消费者。在此传送模型中,目标是一个主题。消息首先被传送至主题目标,然后传送至所有已订阅此主题的活动消费者。可以向主题目标发送消息的生产者的数量没有限制,并且每个消息可以发送至任意数量的订阅消费者。主题目标也支持持久订阅的概念。持久订阅表示消费者已向主题目标进行注册,但在消息传送时此消费者可以处于非活动状态。当此消费者再次处于活动状态时,它将接收此信息。如果没有已经向主题目标注册的消费者,主题不保留其接收到的消息,除

9、非有非活动消费者注册了持久订阅。这两种消息传送模型使用表示不同编程域的 API 对象(其语义稍有不同)进行处理,如下所示:基本类型(统一域)PTP 域Pub/Sub 域ConnectionFactoryQueueConnectionFactoryTopicConnectionFactoryConnectionQueueConnectionTopicConnectionSessionQueueSessionTopicPublisherDestination(Queue 或 Topic)QueueTopicMessageProducerQueueSenderMessageConsumerQueue

10、Receiver,QueueBrowserTopicSubscriber使用图表第一列中列出的统一域对象编写点对点和发布/订阅消息传送。这是首选方法(JMS 1.1规范) 。然而,为了符合早期的 JMS 1.02b 规范,可以使用PTP 域对象编写点对点消息传送,使用 Pub/Sub 域对象编制发布/订阅消息传送。2.5 JMS 消息结构JMS 消息由以下几部分组成:消息头,属性和消息体。2.5.1 消息头(Header)消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination,JMSMessageID 等。消息头由谁设置JMSDestinationsend

11、 方法JMSDeliveryModesend 方法JMSExpirationsend 方法JMSPrioritysend 方法JMSMessageIDsend 方法JMSTimestampsend 方法JMSCorrelationID客户JMSReplyTo客户JMSType客户JMSRedeliveredJMS Provider2.5.2 属性(Properties)除了消息头中定义好的标准属性外,JMS 提供一种机制增加新属性到消息头中,这种新属性包含以下几种:1. 应用需要用到的属性;2. 消息头中原有的一些可选属性;3. JMS Provider 需要用到的属性。标准的 JMS 消息头

12、包含以下属性:消息头描述JMSDestination消息发送的目的地JMSDeliveryMode传送模式, 有两种模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传送的可靠性和吞吐量之间找到平衡点。JMSExpiration消息过期时间,等于 Destination 的 send 方法中的 timeToLive 值加上发送时刻的 GMT 时间值。如果 timeToLive 值等于零,则 JMSExpiration 被设为

13、零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。JMSPriority消息优先级,从0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求 JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。JMSMessageID唯一识别每个消息的标识,由 JMS Provider 产生。JMSTimestamp一个消息被提交给 JMS Provider 到消息被发出的时间。JMSCorrelationID用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。JMSReplyTo提供本消息回复

14、消息的目的地址JMSType消息类型的识别符。JMSRedelivered如果一个客户端收到一个设置了 JMSRedelivered 属性的消息,则表示可能客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。2.5.3 消息体(Body)JMS API 定义了 5种消息体格式,也叫消息类型,可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这5种类型:消息类型消息体TextMessagejava.lang.String 对象,如 xml 文件内容MapMessage名/值对的集合,名是 String 对象,值类型可以是 Java 任何基本类型BytesMes

15、sage字节流StreamMessageJava 中的输入输出流ObjectMessageJava 中的可序列化对象Message没有消息体,只有消息头和属性2.6 PTP 模型PTP(Point-to-Point)模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱一样,队列可以包含各种消息,JMS Provider 提供工具管理队列的创建、删除。JMS PTP 模型定义了客户端如何向队列发送消息,从队列接收消息,浏览队列中的消息。下面描述 JMS PTP 模型中的主要概念和对象:名称描述ConnectionFactory客户端

16、用 ConnectionFactory 创建 Connection 对象。Connection一个到 JMS Provider 的连接,客户端可以用 Connection 创建 Session 来发送和接收消息。Session客户端用 Session 创建 MessageProducer 和 MessageConsumer 对象。如果在 Session 关闭时,有一些消息已经被收到,但还没有被签收(acknowledged),那么,当消费者下次连接到相同的队列时,这些消息还会被再次接收。Destination(Queue 或 TemporaryQueue)客户端用 Session 创建 Des

17、tination 对象。此处的目标为队列,队列由队列名识别。临时队列只能由创建它的 Connection 所创建的消费者消费,但是任何生产者都可向临时队列发送消息。MessageProducer客户端用 MessageProducer 发送消息到队列。MessageConsumer客户端用 MessageConsumer 接收队列中的消息,如果用户在 receive 方法中设定了消息选择条件,那么不符合条件的消息会留在队列中,不会被接收到。可靠性(Reliability)队列可以长久地保存消息直到消费者收到消息。消费者不需要因为担心消息会丢失而时刻和队列保持激活的连接状态,充分体现了异步传输模

18、式的优势。2.7 PUB/SUB 模型JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称作主题(topic)。主题可以被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe) 从主题订阅消息。主题使得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送。下面描述 JMS Pub/Sub 模型中的主要概念和对象:名称描述订阅(subscription)消息订阅分为非持久订阅(non-durable subscription)和持久订阅(durable subscrip-tion),非持久订阅只有当客户端处于激活状态

19、,也就是和 JMS Provider 保持连接状态才能收到发送到某个主题的消息,而当客户端处于离线状态,这个时间段发到主题的消息将会丢失,永远不会收到。持久订阅时,客户端向 JMS 注册一个识别自己身份的 ID,当这个客户端处于离线时,JMS Provider 会为这个 ID 保存所有发送到主题的消息,当客户再次连接到 JMS Provider 时,会根据自己的 ID 得到所有当自己处于离线时发送到主题的消息。ConnectionFactory客户端用 ConnectionFactory 创建 Connection 对象。Connection一个到 JMS Provider 的连接,客户端可以

20、用 Connection 创建 Session 来发送和接收消息。Session客户端用 Session 创建 MessageProducer 和 MessageConsumer 对象。它还提供持久订阅主题,或使用 unsubscribe 方法取消消息的持久订阅。Destination(Topic 和 TemporaryTopic)客户端用 Session 创建 Destination 对象。此处的目标为主题,主题由主题名识别。临时主题只能由创建它的 Connection 所创建的消费者消费。临时主题不能提供持久订阅功能。JMS 没有给出主题的组织和层次结构的定义,由 JMS Provider

21、 自己定义。MessageProducer客户端用 MessageProducer 发布消息到主题。MessageConsumer客户端用 MessageConsumer 接收发布到主题上的消息。可以在 receive 中设置消息过滤功能,这样,不符合要求的消息不会被接收。恢复和重新派送(Recovery and Redelivery)非持久订阅状态下,不能恢复或重新派送一个未签收的消息。只有持久订阅才能恢复或重新派送一个未签收的消息。可靠性(Reliability)当所有的消息必须被接收,则用持久订阅模式。当丢失消息能够被容忍,则用非持久订阅模式。2.8 JMS 支持并发JMS 对象是否支持

22、并发Destination是ConnectionFactory是Connection是Session否MessageProducer否MessageConsumer否3. ActiveMQ 安装3.1 版本jdk 版本:jdk1.5.0_11ActiveMQ 版本: ActiveMQ 4.2测试版C+客户端版本:ActiveMQ CPP 1.1 Release3.2 ActiveMQ 二进制安装gunzip apache-activemq-4.2-20070328.130210-35.tar.gztar xvf apache-activemq-4.2-20070328.130210-35.ta

23、r设置 ActiveMQ 环境变量:ACTIVEMQ_HOME=安装目录设置 CLASSPATH 环境变量 , CLASSPATH=$CLASSPATH:$ACTIVEMQ_HOME/ apache-activemq-4.2-SNAPSHOT.jar3.3 ActiveMQ 移植只需将$ACTIVEMQ_HOME 打包移植到新机器即可。3.4 C+客户端编译安装 perl-5.8.8.tar.gztar xzvf perl-5.8.8.tar.gzcd perl-5.8.8rm -f config.sh Policy.shsh Configure -de -Dprefix=/usrmakemake testmake installreboot系统重新启动,登录系统后可以执行 perl -v 查看 Perl 版本信息检查/usr/bin/perl 或/usr/local/bin/perl 是否指向新版本的 perl安装 m4-1.4.8.tar.gztar xzvf m4-1.4.8.tar.gz

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。