Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126314
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-19 19:13
文章分类

全部博文(46)

文章存档

2015年(1)

2014年(45)

我的朋友

分类: Java

2014-07-26 12:51:43

1、  什么是JMS

jmsJava Message Service接口是一个中关于面向MOM)的,用于在两个应用程序之间,或中发送消息,进行异步通信。



3、  简介

(1)JMS是一种与厂商无关的 API,用来访问消息收发系统。

似于 (Java Connectivity):这里,JDBC 是可以用来访问许多不同关系 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM MQSeriesBEA 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_PERSISTENTPERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。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 

没有消息体,只有消息头和属性

阅读(530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~