2022年ActiveMQ的JMS教程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年ActiveMQ的JMS教程 .pdf》由会员分享,可在线阅读,更多相关《2022年ActiveMQ的JMS教程 .pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ActiveMQ 的安装和使用总结一、ActiveMQ 安装与配置一.window 下安装 activeMQ 1、下载http:/activemq.apache.org/activemq-510-release.html,下载 5.1.0 Windows Distribution 版本2、安装直接解压至任意目录(如:d:apache-activemq-5.1.0)3、启动 ActiveMQ 服务器方法 1:直接运行 binactivemq.bat 方法 2(在 JVM中嵌套启动):cd example ant embedBroker 4、ActiveMQ 消息管理后台系统:http:/loca
2、lhost:8161/admin 二.linux 下安装 ActiveMQ 1.下载http:/activemq.apache.org/download.html 2.解压将下载下来的apache-activemq-5.2.0-bin.tar.gz 放置于/usr/local tar zxvf apache-activemq-5.2.0-bin.tar.gz 3.进入 apache-activemq-5.2.0/bin 目录下:运行./activemq start 命令即可启动 activemq,使用ps ef|grep activemq 查看 activemq 的进程。修改持久化配置名师资料
3、总结-精品资料欢迎下载-名师精心整理-第 1 页,共 34 页 -JMS消息传递是一种异步过程,如果没有接受者JMS Provider应该选择将消息持久化,策略主要有文件持久化和基于数据库的持久化两种,下文是关于将未消费的消息持久化到Oarcle 数据库的。1.我们要做的是将Oracle数据库的驱动包(oracle-jdbc-driver-14.jar)放置到ActiveMQ 的安装目录下的lib(/activeMQ/apache-activemq-5.5.0/lib)里。2.其次,我们需要改写activemq.xml 文件,它在ActiveMQ 的 conf 目录中(也可以修改conf/ac
4、tivemq-jdbc.xml配置文件中的数据源配置实现,通过bin/activemq start xbean:conf/activemqjdbc.xml 命名启动,试过但没成功希望大家有兴趣可以研究下)。下面是 activemq.xml 具体修改部分:!-3.重启 activeMQ(./activemq start),就会在数据库中看到三张表了,向队列发送几条消息后,数据库表中就会有消息的记录了。二、消息中间件和 JMS 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 34 页 -当前,CORBA、DCOM、RMI 等 RPC 中间件技术已广泛应用于各个领域。但是面对规模和复杂
5、度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。面向消息的中间件(Message Oriented Middleware,MOM)较好的解决了以上问题。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的
6、生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。已有的 MOM 系统包括IBM 的 MQSeries、Microsoft的 MSMQ和 BEA 的 MessageQ等。由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。Java Message Service(JMS)是 SUN 提出的旨在统一各种MOM 系统接口的规范,它包含点对点(Point to Point,PTP)和发布/订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。1.JMS JAVA
7、 消息服务(JMS)定义了 Java 中访问消息中间件的接口。JMS 只是接口,并没有给予实现,实现JMS 接口的消息中间件称为JMS Provider,iLink实现了 JMS 接口,用户可以通过使用 JMS 接口,在iLink中进行 JMS 编程。iLink支持 JMS1.0.2版本。2.JMS接口描述JMS 支持两种消息类型PTP 和 Pub/Sub,分别称作:PTP Domain 和 Pub/Sub Domain,这两种接口都继承统一的JMS 父接口,JMS 主要接口如下所示:ConnectionFactory:连接工厂,JMS 用它创建连接Connection:JMS 客户端到JMS
8、 Provider 的连接Destination:消息的目的地MS 父接口PTPPub/SubConnectionFactoryQueueConnectionFactoryTopicConnectionFactoryConnectionQueueConnectionTopicConnectionDestinationQueueTopicSessionQueueSessionTopicSessionMessageProducerQueueSenderTopicPublisherMessageConsumerQueueReceiver,QueueBrowse rTopicSubscriber名师资
9、料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 34 页 -Session:一个发送或接收消息的线程MessageProducer:由 Session 对象创建的用来发送消息的对象MessageConsumer:由 Session 对象创建的用来接收消息的对象3.JMS消息模型JMS 消息由以下几部分组成:消息头,属性,消息体。3.1 消息头(Header)-消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination,JMSMessageID 等。3.2 属性(Properties)-除了消息头中定义好的标准属性外,JMS 提供一种机制增加新属性到消息
10、头中,这种新属性包含以下几种:1.应用需要用到的属性;2.消息头中原有的一些可选属性;3.JMS Provider 需要用到的属性。标准的 JMS 消息头包含以下属性:消息头由谁设置JMSDestinationsend 或 publish 方法JMSDeliveryModesend 或 publish 方法JMSExpirationsend 或 publish 方法JMSPrioritysend 或 publish 方法JMSMessageIDsend 或 publish 方法JMSTimestampsend 或 publish 方法JMSCorrelationID客户JMSReplyTo客户
11、JMSType客户JMSRedeliveredJMS ProviderJMSDestination消息发送的目的地JMSDeliveryMode传递模式,有两种模式:PERSISTENT 和 NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。JMSMessageID唯一识别每个消息的标识,由JMS Provider 产生。JMSTimestamp一个消息被提交给JMS Provider 到消息被发出的时间。名师资料总结-
12、精品资料欢迎下载-名师精心整理-第 4 页,共 34 页 -3.3 消息体(Body)-JMS API 定义了 5 种消息体格式,也叫消息类型,你可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这5 种类型:下例演示创建并发送一个TextMessage到一个队列:TextMessage message=queueSession.createTextMessage();message.setText(msg_text);/msg_text is a String queueSender.send(message);下例演示接收消息并转换为合适的消息类型:Message m=queu
13、eReceiver.receive();if(m instanceof TextMessage)TextMessage message=(TextMessage)m;JMSCorrelationID用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。JMSReplyTo提供本消息回复消息的目的地址JMSRedelivered如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。JMSType消息类型的识别符。JMSExpiration消息过期时间,等于QueueSender 的 s
14、end 方法中的timeToLive 值或 TopicPublisher 的 publish 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。JMSPriority消息优先级,从0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求 JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。消息类型消息体TextMessagejava.lang.String对象,
15、如xml文件内容MapMessage名/值对的集合,名是String对象,值类型可以是Java任何基本类型BytesMessage字节流StreamMessageJava中的输入输出流ObjectMessageJava中的可序列化对象Message没有消息体,只有消息头和属性名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 34 页 -System.out.println(Reading message:+message.getText();else /Handle error 4.消息的同步异步接收消息的同步接收是指客户端主动去接收消息,JMS 客户端可以采用MessageCon
16、sumer 的 receive方法去接收下一个消息。消息的异步接收是指当消息到达时,主动通知客户端。JMS 客户端可以通过注册一个实现MessageListener 接口的对象到MessageConsumer,这样,每当消息到达时,JMS Provider 会调用MessageListener中的 onMessage 方法。5.PTP模型PTP(Point-to-Point)模型是基于队列的,发送方发消息到队列,接收方从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱一样,队列可以包含各种消息,JMS Provider 提 供工具管理队列的创建、删除。JMS PTP 模型
17、定义了客户端如何向队列发送消息,从队列接收消息,浏览队列中的消息。下面描述JMS PTP 模型中的主要概念和对象:名称描述Queue由 JMS Provider 管理,队列由队列名识别,客户端可以通过 JNDI 接口用队列名得到一个队列对象。TemporaryQueue由 QueueConnection 创建,而且只能由创建它的QueueConnection 使用。QueueConnectionFactory客户端用QueueConnectionFactory 创建QueueConnection 对象。QueueConnection一个到 JMS PTP provider 的连接,客户端可以用
18、QueueConnection 创建 QueueSession 来发送和接收消息。QueueSession提供一些方法创建QueueReceiver、QueueSender、QueueBrowser 和 TemporaryQueue。如果在QueueSession 关闭时,有一些消息已经被收到,但还没有被签收(acknowledged),那么,当接收者下次连接到相同的队列时,这些消息还会被再次接收。QueueReceiver客户端用QueueReceiver 接收队列中的消息,如果用户在QueueReceiver 中设定了消息选择条件,那么不符合条件的消息会留在队列中,不会被接收到。Queue
19、Sender客户端用QueueSender 发送消息到队列。QueueBrowser客户端可以QueueBrowser 浏览队列中的消息,但不会收走消息。名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 34 页 -6.PUB/SUB模型JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称作主题(topic)。主题可以被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe)从主题订阅消息。主题使得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送。下面描述JMS Pub/Sub 模型中的主要概念和对象
20、:QueueRequestorJMS 提供 QueueRequestor 类简化消息的收发过程。QueueRequestor 的构造函数有两个参数:QueueSession 和 queue,QueueRequestor 通过创建一个临时队列来完成最终的收发消息请求。可靠性(Reliability)队列可以长久地保存消息直到接收者收到消息。接收者不需要因为担心消息会丢失而时刻和队列保持激活的连接状态,充分体现了异步传输模式的优势。名称描述订阅(subscription)消息订阅分为非持久订阅(non-durable subscription)和持久订阅(durable subscrip-tion
21、),非持久订阅只有当客户端处于激活状态,也就是和 JMS Provider 保持连接状态才能收到发送到某个主题的消息,而当客户端处于离线状态,这个时间段发到主题的消息将会丢失,永远不会收到。持久订阅时,客户端向JMS 注册一个识别自己身份的ID,当这个客户端处于离线时,JMS Provider 会为这个ID 保存所有发送到主题的消息,当客户再次连接到JMS Provider时,会根据自己的ID 得到所有当自己处于离线时发送到主题的消息。Topic主题由 JMS Provider 管理,主题由主题名识别,客户端可以通过 JNDI 接口用主题名得到一个主题对象。JMS 没有给出主题的组织和层次结构
22、的定义,由JMS Provider 自己定义。TemporaryTopic临时主题由TopicConnection 创建,而且只能由创建它的TopicConnection 使用。临时主题不能提供持久订阅功能。TopicConnectionFactory客户端用 TopicConnectionFactory 创建 TopicConnection 对象。TopicConnectionTopicConnection 是一个到JMS Pub/Sub provider 的连接,客户端可以用TopicConnection创建 TopicSession 来发布和订阅消息。TopicSessionTopicS
23、ession 提供一些方法创建TopicPublisher、TopicSubscriber、TemporaryTopic。它还提供unsubscribe 方法取消消息的持久订阅。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 34 页 -7.开发 JMS的步骤广义上说,一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成:用 JNDI 得到 ConnectionFactory 对象;用 JNDI 得到目标队列或主题对象,即Destination 对象;用 ConnectionFactory 创建 Connection 对象;用 Connection
24、对象创建一个或多个JMS Session;用 Session 和 Destination 创建 MessageProducer 和 MessageConsumer;通知 Connection 开始传递消息。三、深入掌握 JMS 1.JMS基础1.JMS 基本概念JMS(Java Message Service)即 Java 消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。
25、TopicPublisher客户端用TopicPublisher 发布消息到主题。TopicSubscriber客户端用TopicSubscriber 接收发布到主题上的消息。可以在 TopicSubscriber 中设置消息过滤功能,这样,不符合要求的消息不会被接收。Durable TopicSubscriber如果一个客户端需要持久订阅消息,可以使用Durable TopicSubscriber,TopSession 提供一个方法createDurableSubscriber创建 Durable TopicSubscriber 对象。恢复和重新派送(Recovery and Redeliv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ActiveMQ的JMS教程 2022 ActiveMQ JMS 教程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内