`
canofy
  • 浏览: 830148 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

JMS学习笔记

    博客分类:
  • j2EE
阅读更多
JSR914

JMS  为 Java 程序提供了一种创建、发送、接收和读取企业消息系统中消息的通用方法。
“消息”是指被企业应用而不是人所消费的异步的请求、报告以及事件。
Messages(消息):每个应用定义了用于在客户端之间进行通讯的消息。

同步消费者显式调用方法来获取消息,异步消费者指定一个回叫方法来处理消息。

JMS  基于一套通用的消息概念。每个JMS消息域(PTP  和Pub/Sub)也都定义了一套自己概念的接口。JMS  通用接口则提供了不依赖于PTP和Pub/Sub消息域的能力。
ConnectionFactory :被管理的对象,由客户端使用,用来创建一个连接。 (这是客户端用来创建同 JMS提供者之间的连接的对象。)
Connection:一个到JMS消息系统提供者的活动连接。
Destination :一个被管理对象,封装了消息目的地的标识。(这个对象是客户端用来指明消息被发送的目的地以及客户端接收消息的来源。 )
Session - a single:一个用来发送和接收消息的单独的线程上下文
MessageProducer :一个由Session对象创建的,用来发送消息的到目的地的对象。
MessageConsumer  :一个由Session对象创建的,用来接收发送到某个目的地的消息的对象。


开发一个基于 JMS的消息客户端应用的编程步骤
  1、使用JNDI查找一个ConnectionFactory对象。
  2、使用JNDI查找一个或者多个Destination对象。
  3、使用ConnectionFactory创建一个JMS连接
  4、使用连接创建一个或者多个JMS Sessions
  5、使用Session and Destinations  创建所需的MessageProducers 和MessageConsumers 
  6、告知Connection 开始传送消息。


企业级的消息产品将消息看做包括一个“头”(header)和一个“体”(body)的“轻量级”条目。 “消息头”包含一些用于消息路由和消息识别的字段。 “消息体”中包含了被发送的应用数据。


JMS消息模型目标如下:
  提供一个单独,统一的消息API。
  提供一个API用于创建消息能够匹配已有的,非JMS应用所使用的格式。
  支持跨操作系统、机器结构以及计算机语言的异构应用的开发。
  支持包含Java对象的消息。
  支持包含可扩展标记语言(XML)页面的消息。

JMS消息包含以下组成部分:
  消息头(Header)  :所有的消息都支持一套相同的头字段。头字段包含了客户端和提供者(provider)用来路由和识别消息的数据。
  消息属性(Properties ):在标准头字段之外提供一种内建的设施用于给消息添加可选的头字段
  应用指定的属性:提供一种给消息添加应用指定的头字段的机制。
  标准属性 :JMS定义的一些标准属性,即一些有效的、可选的头字段。
  Provider指定的属性:在集成JMS客户端和provider 内在客户端时可能需要使用
  Provider指定的属性,JMS  为这些定义了命名约定。
消息体(Body):JMS定义了几种类型的消息体,这些消息体覆盖目前常用的几种消息样式。


对消息头信息如何被设置的总结
Header Fields  Set By
JMSDestination  Send Method
JMSDeliveryMode  Send Method
JMSExpiration  Send Method
JMSPriority  Send Method
JMSMessageID  Send Method
JMSTimestamp  Send Method
JMSCorrelationID  Client
JMSReplyTo  Client
JMSType  Client
JMSRedelivered  Provider


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 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。



JMS 定义的属性
JMSXUserID       String  Send      用于标识发送消息的用户。
JMSXAppID        String  Send      用于识别发送消息的应用。
JMSXDeliveryCount  int Receive     这消息发送尝试的次数。第一次是1,然后是2…..
JMSXGroupID      String  Client    用来表示消息是哪个组的一部分。
JMSXGroupSeq     int     Client    表示消息在组内的顺序号第一个消息是1,第二个是2,……
JMSXProducerTXID String  Send      事务标识符,用来表示消息是在哪个事务中产生的。
JMSXConsumerTXID String  Receive   消息标识符,用来说明消息是在哪个事务中被消费的。
MSXRcvTimestamp  long    Receive   消息被发送到消费者时的时间。
JMSXState        int               设想有一个消息仓库保存每个被发给消费者消息的拷贝,并且这些拷贝从消息开始发出之时就存在。每个拷贝的状态是如下:
                                   1(waiting), 2(ready), 3(expired) or 4(retained).
   因为产生者和消费者都不关心状态,所以这个属性只是用于在仓库中查询消息,并且JMS没有为其提供任何的API。

JMS消息体
JMS提供五种格式的消息体。每种格式都通过一个消息接口定义。
• StreamMessage –  消息体包含了一个Java primitive 流,这个流被顺序地填充和读取。
• MapMessage –  消息体包含了一系列的名字-值对。名字是Strings,而值则是Java primitive类型。消息体中的条目可以被enumerator按照顺序访问,也可以自由访问。条目的顺序没有定义。
• TextMessage –  消息体包含了一个java.lang.String.  包含这种这种消息类型是考虑到String消息将被广泛使用的前提。另外一个原因就是XML将可能变成一种用来表示JMS消息内容的主流机制。
• ObjectMessage –消息包含了一个可序列化的Java对象.如果需要Java对象集合(collection),可以是JDK 1.2提供的集合类型中的任何一种。
• BytesMessage –  消息包含了一个不间断的字节流。这个消息类型是用来以文字方式编码一个消息体以匹配存在的消息格式。在很多种情况下,它可能被用于以下用途:自定义的消息类型,尽管JMS允许使用带有字节的消息属性,但它们通常不能被使用,因为包含的属性可以影响格式。


“事务性会话”指的是这种情况,即,一个会话的提交和回滚方法被用来界定一个事务是否位于这个会话。在会话的工作由一个外部事务管理器来协调处理的时候。不需要调用会话的提交和回滚方法,并且,关闭会话工作的结果最终由事务管理器决定


没有限制能够使用一个会话对象的线程数量,也没有限制线程能够创建会话的数量。限制就是会话的资源不能够被多个线程并发使用。它要求用户来保证这种并发限制被满足。最简单的方法就是使用一个线程。在异步传送的情况下,使用一个线程用来在停止模式下建立会话,然后启动异步传送。在更复杂的情况下,用户必须提供显式的同步


JMS支持两种消息传送模式:
    1、NON_PERSISTENT    模式是开销最低的传输模式,因为它不需要消息被记录到稳定的存储中。JMS提供者失败会导致NON_PERSISTENT  被丢失。
    2、PERSISTENT 模式指令JMS提供者特别关注“不能由于JMS  提供者的失败而导致的消息的丢失”。JMS提供者最多只能将NON_PERSISTENT消息发送一次。这意味着,它可能会丢失消息,但决不会发送两次。JMS提供者必须保证PERSISTENT发送一次且只有一次。这意味着,JMS提供者的失败不会导致消息丢失,而且它不会被发送两次。 

点对点系统是用队列来处理消息,它之所以是“点对点”是因为客户端向特定的队列发送消息。

JMS Pub/Sub模式定义JMS客户端如何发布消息,并且从一个众所周知的基于内容结构的节点来定义消息。JMS将这些节点称之为主题(topics)。






分享到:
评论

相关推荐

    JMS学习笔记精心总结

    **JMS学习笔记精心总结** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,使得应用程序能够在不直接连接的情况下...

    JMS学习笔记(一)——JMS简介安装ActiveMQ

    **JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...

    jms学习笔记jms学习笔记

    本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...

    JMS相关,教程,例子,学习笔记

    通过阅读**jms学习笔记.docx** 和 **JMS例子.docx**,你可以深入理解JMS的使用方式,获取实践经验。而 **JMS教程.pdf** 和 **基于XML和JMS的异构数据交换集成的研究.pdf** 则提供了理论基础和高级应用场景的讲解,有...

    ActiveMQ学习笔记(二) JMS与Spring

    在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...

    JAVA学习笔记————————

    在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...

    RocketMQ学习笔记 1

    RocketMQ学习笔记 1是关于Apache RocketMQ的学习笔记,涵盖了RocketMQ的基本概念、架构、消息模型、Producer和Consumer的基本概念、JMS规范等知识点。 1. 消息模型 在RocketMQ中,消息模型是指消息的生产、存储和...

    active mq 学习笔记

    ### ActiveMQ学习笔记知识点梳理 #### 一、ActiveMQ简介 **定义:** - **ActiveMQ**是由Apache出品的一款功能强大的开源消息中间件。作为消息队列(Message Queue,简称MQ)的一种,它主要用来在分布式系统之间...

    javaEE学习笔记

    本学习笔记涵盖了JavaEE的核心技术,帮助学习者深入理解和掌握javaweb的各项技能。 1. **Servlet与JSP** - **Servlet**:Servlet是Java编写的服务器端程序,主要用于扩展服务器的功能。在JavaEE中,Servlet处理...

    JavaEE学习笔记

    ### JavaEE 学习笔记概览 #### 一、JavaEE 概念及发展历程 JavaEE(Java Platform, Enterprise Edition)是Sun Microsystems公司为简化企业级应用开发而提出的一套标准化平台,它提供了构建分布式系统的基本框架和...

    Java-J2EE全部学习笔记 培训结构的学习资料

    这份"Java-J2EE全部学习笔记 培训结构的学习资料"涵盖了从基础到高级的Java编程和J2EE应用开发的知识点,对于想要深入理解Java EE技术的人来说是一份宝贵的资源。 1. **Java基础知识**:这部分可能包括Java语言的...

    软件工程师学习笔记J2EE

    《软件工程师学习笔记J2EE》是一份针对Java企业级应用开发(J2EE)的详尽学习资源,对于想要深入理解和掌握J2EE技术体系的软件工程师来说,具有极高的参考价值。这份笔记不仅全面覆盖了J2EE的基础概念,还深入探讨了...

    J2EE学习笔记 对学习非常有帮助

    **J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专门针对企业级应用开发。它提供了一个全面的框架来构建、部署和管理多层、分布式、跨平台的企业应用程序。J2EE学习笔记...

    j2ee学习笔记很好的

    【J2EE学习笔记概述】 J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级应用的框架。它提供了一个统一的标准和可扩展的平台,允许开发人员创建分布式、多层的企业应用程序。J2EE的...

Global site tag (gtag.js) - Google Analytics