`

理解JMS

阅读更多

首先JMS存在的理由:

RPC(Remote procedure call )系统以及JAVA的RMI都是采用基于服务端、客服端协同完成数据通信的,然而他们有一个共同点就是同步的,调用者必须阻止和等待,直到被调用的方法完成执行;而且两者之间的通信在同一时间必须都是处于活动状态。这样在服务端和客服端就死死的紧密的耦合在了一起,在企业应用中很不方便。应运而生的就是JMS,然后应运而生的就是基于JMS的面向消息中间件(Message-Oriented Middleware:MOM)。因为MOM能提供这种解决方案,它们是基于异步交互模式,并提供一个消息队列的抽象的,可以在网络上传输和访问。

 

JMS的概念:

JMS,Java Message Service,是一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914),是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。

可以把它理解为是一套实现某类特定需求的一套接口,或者说是一套API,或者说是一套标准,或者说是一套规范,它的存在类似于JDBC一样。许多厂商针对标准就开发了自己的不同产品,JMS则提供与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ以及Apache的ActiveMQ,这些MOM产品就跟针对JDBC的不同数据库的驱动包类似的效果,类似的概念。

Java消息服务(JMS)的设计,可以很容易地开发业务应用程序异步发送和接收的业务数据和事件,它可以很容易地和有效地支持广泛的企业消息传递产品。

 

JMS应用程序的成员:

一个JMS实现者:一个实现了JMS规范的消息管理系统

多个JMS客服端:发送和接收消息的JAVA应用程序
消息体: 指的是在客服端之间传输的对象
管理消息的对象: 使用JMS的管理员预先配置的JMS对象

 

JMS的消息传递模型

1.Point-to-Point (Queue destination): In this model, a message is delivered from a producer to one consumer. The messages are delivered to the destination, which is a queue, and then delivered to one of the consumers registered for the queue. While any number of producers can send messages to the queue, each message is guaranteed to be delivered, and consumed by one consumer. If no consumers are registered to consume the messages, the queue holds them until a consumer registers to consume them.

点对点的基于队列的模型:在这个模型中,一个消息主体从一个生产这传输到一个消费者。生产者将生产的消息传递到队列(目的地),然后该队列将消息传输到一个在该队列上注册过的一个消费者。多个生产者都可以将消息传递到队列,每一个消息都将保证与一个消费者之间进行传输并消费。如果没有消费者的注册消费的消息,队列将保留,直到消费者请求消费它。

2.Publish/Subscribe (Topic destination): In this model, a message is delivered from a producer to any number of consumers. Messages are delivered to the topic destination, and then to all active consumers who have subscribed to the topic. In addition, any number of producers can send messages to a topic destination, and each message can be delivered to any number of subscribers. If there are no consumers registered, the topic destination doesn't hold messages unless it has durable subscription for inactive consumers. A durable subscription represents a consumer registered with the topic destination that can be inactive at the time the messages are sent to the topic.

发布订阅模型:在这个模型中,一个由生产者(发布者)生产的消息可以传递给多个消费者。发布的消息首先被传输到Topic(目的地),可以将它看成是一个主题,接着将消息传输到所有订阅了这个主题的并且处于活动状态的消费者。此外,任何数量的生产者可以向主题topic发送消息,每个消息可以发送到任意数量的订阅者。如果没有用户订阅该消息,主题topic不保留消息,除非它有持久订阅者。一个持久订阅者指的是一个订阅了某个主题的一个消费者,在消息被发送到主题的这段时间里该订阅者是处于非活动状态的,此时topic才持久化该消息

 

JMS编程模型:

 

一个JMS应用程序由业务定义的消息和一组消费这些消息的消费者构成。通过使用JMS的提高的API来发送和接受这些消息进行交互。一个消息由三部分组成:消息头,属性和主体:

  • The header, which is required for every message, contains information that is used for routing and identifying messages. Some of these fields are set automatically, by the JMS provider, during producing and delivering a message, and others are set by the client on a message by message basis.

   消息头,每个消息都必须有消息头,包含该消息的指向和定义的一些信息,消息头里面的部分字段是被JSM产品提供商在生产和传递过程中自动设值的,另一部分字段是在基本消息体的基础上被客服端设值的。

  • Properties, which are optional, provide values that clients can use to filter messages. They provide additional information about the data, such as which process created it, the time it was created. Properties can be considered as an extension to the header, and consist of property name/value pairs. Using properties, clients can fine-tune their selection of messages by specifying certain values that act as selection criteria.

    属性信息,是可选的,是以键值对出现的,可以方便消费者用来过滤消息。他是用来记录一些额外的一些数据,比如该消息是哪个进程创建的,什么时间创建的。属 性可以被认为是作为消息头的一个扩展,由键值对组成。使用属性,客服端可以根据他们的选择标准选择他们需要的消息。

  • The body, which is also optional, contains the actual data to be exchanged. The JMS specification defined six type or classes of messages that a JMS provider must support:

    消息体,也是可选的,包含在交换过程中的实际数据。JMS规范定义了6个类型或类别的消息, JMS产品提供商必须支持这些类型:

  • Message : This represents a message without a message body.消息不包含消息主体的消息
  • StreamMessage : A message whose body contains a stream of Java primitive types. It is written and read sequentially.消息体包含能被顺序读写的Java基本数据类型流的消息
  • MapMessage : A message whose body contains a set of name/value pairs. The order of entries is not defined.消息体包含没有先后顺序的一组键值对的消息
  • TextMessage : A message whose body contains a Java string...such as an XML message.消息体包含类似于XML格式的Java字符串的消息
  • ObjectMessage : A message whose body contains a serialized Java object.消息体包含Java序列化对象的消息
  • BytesMessage : A message whose body contains a stream of uninterpreted bytes.消息体包含未经过解析的字节流的消息
3
0
分享到:
评论
4 楼 crawler 2012-09-13  
TheMatrix 写道
简单认为它就是一组API,不同中间件厂商有自己的实现,单都大同小异?因为接口相同,消息生产者余消费者访问的都只是接口,对吗?

可以这样简单的理解
3 楼 TheMatrix 2012-09-13  
简单认为它就是一组API,不同中间件厂商有自己的实现,单都大同小异?因为接口相同,消息生产者余消费者访问的都只是接口,对吗?
2 楼 crawler 2012-09-07  
vanghoh 写道
楼主文章写的不错,但是关于“JMS存在的理由”有点小毛病:

jms 其实更像jdbc,是java语言与各厂商消息中间件的api接口;也就是说先有的消息中间件,后有的jms。 只不过消息中间件的实现比数据库相对容易的多,所以很多java ee server上也就顺便实现了jms,后来又有了一些基于java的独立的消息中间件,如apache activemq。

你的正解,其实我想表达的也就是你的意思,我不是强调先后顺序,我想表达的是很多厂商实现了JMS标准。
1 楼 vanghoh 2012-09-07  
楼主文章写的不错,但是关于“JMS存在的理由”有点小毛病:

jms 其实更像jdbc,是java语言与各厂商消息中间件的api接口;也就是说先有的消息中间件,后有的jms。 只不过消息中间件的实现比数据库相对容易的多,所以很多java ee server上也就顺便实现了jms,后来又有了一些基于java的独立的消息中间件,如apache activemq。

相关推荐

    JMS

    这表明讨论可能涉及到JMS的底层实现细节,比如通过查看源码理解JMS的工作机制,或者是介绍一些实用的工具来辅助JMS的开发和调试,例如消息监视工具、性能测试工具等。源码分析可以帮助开发者更深入地理解JMS如何处理...

    JMS demo 及 资料

    这些内容对于初学者理解JMS的工作原理和实际操作是非常有帮助的。 学习JMS有助于开发人员理解和实现企业级的异步通信解决方案,它在大型分布式系统、微服务架构以及事件驱动的设计模式中扮演着重要角色。通过深入...

    JMS 使用 ActiveMQ 传送文件

    3. **jms规范教程.pdf** - 这是一个关于JMS规范的教程,可能详细讲解了JMS接口、消息类型(如点对点和发布/订阅模型)、消息队列和主题等核心概念,为理解JMS和ActiveMQ的工作原理提供了基础。 综上所述,这个主题...

    Weblogic创建JMS服务器

    首先,我们要理解JMS服务器在WebLogic中的作用。JMS服务器负责管理消息生产者和消费者之间的交互,通过消息队列或主题来存储和传递消息。创建JMS服务器需要以下步骤: 1. **启动WebLogic控制台**:打开浏览器,输入...

    Weblogic JMS 依赖jar包下载

    Weblogic JMS 依赖jar包是Oracle公司的中间件产品Weblogic Server中用于...在开发过程中,理解JMS的原理和Weblogic JMS的配置细节,以及正确引用和使用这些jar包,对于成功地在Weblogic 11g上实现消息服务至关重要。

    JMS1.1规范(中文)

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,主要用于在...通过下载并研究"JMS1.1规范(中文).pdf",开发者可以深入理解JMS的工作原理,提高其在企业级应用开发中的实践能力。

    JMS规范教程pdf

    通过以上解析,我们可以看到JMS规范教程详细介绍了JMS的基本概念、消息模型以及通用设施,为开发者提供了构建和理解JMS应用程序所需的关键知识。JMS不仅提供了消息传递的基础结构,还涵盖了消息的管理和控制,使得...

    JMS 规范(英文)

    ### JMS规范详解 #### 一、概述 Java消息服务(Java Message Service,简称JMS)是Java平台中关于面向消息中间件(MOM)的API,...无论是初学者还是有经验的开发人员,深入理解JMS规范都是提高项目效率和质量的关键。

    JMS相关的Source

    【正文】 JMS(Java Message Service)是一种标准的API,用于在分布式系统中进行消息传递。它提供了一种异步通信的方式,...对于深入理解JMS、JBoss和Spring的集成,以及消息驱动的架构设计,这些都是宝贵的学习材料。

    ActiveMQ 中javax.jms的源码 javax.jms-sources-1.1.zip

    通过深入研究ActiveMQ的javax.jms源码,我们可以更深入地理解JMS的工作原理,了解如何利用ActiveMQ实现高效、可靠的消息通信。这有助于我们在实际项目中更好地应用和优化消息中间件,提升系统的稳定性和性能。 总之...

    activeMQ-JMS实例

    在本文中,我们将深入探讨如何使用...这个实例对于学习和理解JMS以及如何在实际项目中应用它是很有帮助的。通过这个实例,开发者可以进一步掌握异步通信、消息中间件的使用,以及Spring MVC和ActiveMQ的整合技巧。

    JMS经典实例 基于weblogic

    首先,我们要理解JMS的核心概念: 1. **消息**:是数据的载体,它包含了要传输的信息。 2. **消息队列**:是一种先进先出(FIFO)的数据结构,每个消息只能被一个消费者消费一次。 3. **主题**:支持多播,允许多个...

    weblogic_jms服务器配置

    总之,配置 WebLogic JMS 服务器需要理解 JMS 的基本概念,熟练使用 WebLogic 管理控制台,并且根据实际业务需求调整相关参数。正确配置后,JMS 服务器能为你的应用程序提供可靠的异步通信和消息传递能力。

    JMS简单示例1

    **JMS简介** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的标准化API,...通过学习和理解JMS的基础知识,我们可以构建出稳定、可靠的分布式系统,实现不同服务间的解耦和异步通信。

    jms.rar_jms

    通过这些源代码,你可以深入理解JMS的使用方式,包括如何创建消息、如何设置消息属性、如何创建和配置队列或主题,以及如何在WebLogic和WebSphere环境下部署和运行这些组件。此外,这也能帮助你了解如何在实际项目中...

    JMS规范培训教程、JMS源代码

    1. **JMS概念**:解释了消息队列、消息生产者、消息消费者、消息代理(如消息服务器)等基本概念,帮助初学者理解JMS的工作机制。 2. **JMS API**:详述了JMS提供的接口和类,如`ConnectionFactory`、`...

    JMS1.1规范 中文版

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。...通过深入理解JMS,开发者可以有效地利用消息中间件提高系统的并发处理能力和容错性,实现灵活且高效的系统设计。

    java jms 源码都在其中

    Java JMS(Java Message Service)是Java平台中用于在分布式环境中进行异步消息传递的标准API。它提供了一种规范,使得不同的...同时,源码阅读也能帮助开发者更好地理解JMS规范,为解决复杂问题和优化性能提供思路。

    JMS标准规范培训教程

    《JMS规范培训教程》这份文档很可能是深入理解JMS标准和实际应用的指南,它可能涵盖了JMS的基本概念、API用法、消息模型的比较、事务处理、消息持久化、故障恢复策略等内容。通过学习这份教程,开发者能够熟练地在...

Global site tag (gtag.js) - Google Analytics