分类: Java
2014-07-26 12:51:43
1、 什么是JMS
jms即(Java Message Service)接口是一个中关于面向(MOM)的,用于在两个应用程序之间,或中发送消息,进行异步通信。
3、 简介
(1)JMS是一种与厂商无关的 API,用来访问消息收发系统。
它似于 (Java Connectivity):这里,JDBC 是可以用来访问许多不同关系的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ
(2)消息收发系统是异步的。
JMS 客户机可以发送消息而不必等待回应。不同于基于 RPC 的(基于远程过程的)系统,如 1.1、 和 Java 的引用实现。在 RPC 中,客户机调用服务器上某个分布式对象的一个方法。在方法调用返回之前,该客户机被阻塞;该客户机在可以执行下一条指令之前,必须等待方法调用结束。在 JMS 中,客户机将消息发送给一个虚拟通道(主题或队列),而其它 JMS 客户机则预订或监听这个虚拟通道。当 JMS 客户机发送消息时,它并不等待回应。它执行发送操作,然后继续执行下一条指令。消息可能最终转发到一个或许多个客户机,这些客户机都不需要作出回应。
(3)JMS消息模型
Point-to-Point消息() :
发布订阅消息(Puub):
(4)JMS消息组成
消息头:消息头包含消息的识别信息和路由信息 ;
消息属性:用户自定义的消息属性(可定义各种基本类型的属性);
消息体:消息的具体内容。
(5)JMS消息模式
队列模式(Queue):生产端发送消息,消费者消费消息,一旦消费者确认消费掉了消息,消息将从Queue中删除——即消息只能被 正常消费一次 ;
话题模式(Topic):生产端发布消息,消息可以有多个订阅者,只有所有订阅者都正常获取了消息后,消息才会被删除;
(6) JMS规范中定义的接口
ConnectionFactory :连接工厂,JMS 用它创建连接;
Connection :JMS 客户端到JMS Provider 的连接;
Destination :消息的目的地
Session: 一个发送或接收消息的线程
MessageProducer: 由Session 对象创建的用来发送消息的对象
MessageConsumer: 由Session 对象创建的用来接收消息的对象
附:
消息头
JMSDestination |
消息发送的目的地 |
JMSDeliveryMode |
传递模式, 有两种模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。 |
JMSMessageID |
唯一识别每个消息的标识,由JMS Provider 产生。 |
JMSTimestamp |
一个消息被提交给JMS Provider 到消息被发出的时间 |
JMSCorrelationID |
用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。 |
JMSReplyTo |
提供本消息回复消息的目的地址 |
JMSRedelivered |
如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。 |
JMSType |
消息类型的识别符。 |
JMSExpiration |
消息过期时间,等于QueueSender 的send 方法中的timeToLive 值或TopicPublisher 的publish 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。 |
JMSPriority |
消息优先级,从0-9 十个级别, |
消息体
消息类型 |
消息体 |
TextMessage |
java.lang.String对象,如xml文件内容 |
MapMessage |
名/值对的集合,名是String对象,值类型可以是Java任何基本类型 |
BytesMessage |
字节流 |
StreamMessage |
Java中的输入输出流 |
ObjectMessage |
Java中的可序列化对象 |
Message |
没有消息体,只有消息头和属性 |