`

深入浅出JMS–JMS基本概念(一)

阅读更多

 

文章出自:http://www.aijava.cn/13511.html

 

摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。

 

这篇博文我们主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。

 

  1. 基本概念

    JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

  2. 消息模型

    ○ Point-to-Point(P2P)
    ○ Publish/Subscribe(Pub/Sub)

    即点对点和发布订阅模型

  3. P2P

  1. P2P模式图 
  2. 涉及到的概念 
    1. 消息队列(Queue)
    2. 发送者(Sender)
    3. 接收者(Receiver)
    4. 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
  3. P2P的特点

    1. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
    2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
    3. 接收者在成功接收消息之后需向队列应答成功

    如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。

 

  1. Pub/Sub

    1. Pub/Sub模式图 
    2. 涉及到的概念 
      1. 主题(Topic)
      2. 发布者(Publisher)
      3. 订阅者(Subscriber) 
        客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
    3. Pub/Sub的特点

      1. 每个消息可以有多个消费者
      2. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
      3. 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

      如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

  2. 消息的消费 
    在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。 
    ○ 同步 
    订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞 
    ○ 异步 
    订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。

  3. JMS编程模型

    (1) ConnectionFactory

    创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。

    (2) Destination

    Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。

    所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。

    (3) Connection

    Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。

    (4) Session

    Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。

    (5) 消息的生产者

    消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。

    (6) 消息消费者

    消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。

    (7) MessageListener

    消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。

  4. 企业消息系统的好处

我们先来看看下图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息,通过这个图我们一起来分析一下JMS的好处: 

  1. 提供消息灵活性
  2. 松散耦合
  3. 异步性

对于JMS的基本概念我们就介绍这么多,下篇博文介绍一种JMS的实现。

 

 

 

 

 

 

 

 

 

 

  • 大小: 15.9 KB
  • 大小: 37.8 KB
  • 大小: 45.3 KB
分享到:
评论

相关推荐

    深入浅出JMS-JMS介绍说明文档

    ### JMS基本概念与原理详解 ...通过深入了解JMS的基本概念、消息模型及编程模型,开发者可以更好地利用这一技术解决实际问题。无论是构建高可用性的分布式系统还是实现复杂的业务逻辑,JMS都是一个值得信赖的选择。

    ActiveMQ在JMS中的运用-深入浅出JMS

    **ActiveMQ在JMS中的应用——深入理解JMS** Java消息服务(Java Message Service,简称JMS)是一种标准API,用于在Java应用程序之间传递消息,它提供了一种解耦和异步处理数据的方式。JMS允许应用程序创建、发送、...

    深入浅出java

    "深入浅出"这一理念,意味着作者通过直观、生动的示例和丰富的图解,帮助读者逐步理解Java的核心概念和技术。 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出。它的...

    深入掌握JMS.doc

    总的来说,深入掌握JMS意味着理解和应用这些基本概念,并能够根据实际场景选择适当的通信模型和消息类型,有效地实现应用程序间的通信。同时,了解如何配置和使用JMS提供者,如ActiveMQ,也是至关重要的。通过实际的...

    JMS概念及原理,简明扼要

    JMS提供了一种与具体实现无关的接口,使得开发人员能够编写出能够在多种消息传递系统上运行的应用程序。 #### 二、JMS的基本概念 ##### 1. 消息模型 JMS支持两种消息模型:点对点(Point-to-Point, P2P)和发布/...

    JMX与JMS的概念

    JMS 为集成现有后台系统提供了一个标准化的途径,降低了系统间的耦合度。 总结来说,**JMX** 和 **JMS** 在目的和功能上有着明显的区别。**JMX** 关注于管理和监控,而 **JMS** 则专注于消息的传递。在实际应用中,...

    深入浅出WebService

    【深入浅出WebService】这篇文章是面向初学者的指南,旨在帮助读者理解并熟悉WebService的基本概念和技术。WebService是一种基于Web的服务,允许不同系统间通过网络进行通信和数据交换,以实现跨平台、跨语言的互...

    jms-1.1.jar

    本文将深入探讨JMS 1.1的核心概念、主要特性以及实际应用。 一、JMS核心概念 1. 消息:在JMS中,消息是数据传输的基本单元,它封装了要传递的信息。消息可以包含文本、二进制数据或任何Java对象。 2. 消息生产者...

    深入浅出JBoss_2BSeam

    《深入浅出JBoss_2BSeam》这本书聚焦于企业级Java应用服务器JBoss以及Seam框架的深度解析。JBoss是Red Hat公司开发的一个开源应用服务器,它基于Java EE(Enterprise Edition)标准,提供了丰富的功能和服务,支持...

    jms-1.1.jar(jms工具jar包)

    JMS的核心概念主要包括以下几点: 1. **消息**:在JMS中,消息是数据传输的基本单元,它封装了要传递的信息。消息可以是文本、二进制或其他复杂的数据结构。 2. **消息生产者(Message Producer)**:负责创建和...

    JMS消息模型 JMS学习.doc

    Java 消息服务(JMS,Java Message Service)是一种用于在分布式系统中进行异步数据交换的API,它为应用程序提供了标准的接口来发送和接收消息。...理解和掌握JMS的基本概念和用法,对于开发企业级Java应用至关重要。

    JMS demo 及 资料

    在"JMS入门级的蹩脚篇.ppt"这个文件中,可能包含了以下内容:JMS的基本概念解释,如何创建消息,如何设置消息队列和主题,如何编写生产者和消费者代码示例,以及如何配置和运行JMS应用程序。这些内容对于初学者理解...

    java.jms.jar JMS需要的JAR包

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,它定义了一种标准的接口,使得应用程序可以与各种消息中间件进行交互,实现异步的消息传递。JMS允许应用程序创建、发送、接收...

    javax.jms.jar

    Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....

    OSB中JMS配置及队列使用说明

    同时,需要了解基本的 JMS 概念和 OSB 的基本配置。 JMS 及消息队列概要介绍 JMS 是 Java 平台上的一种消息服务规范,允许 Java 应用程序创建、发送、接收和读取消息。JMS 提供了两种类型的消息模型:点对点模型和...

    JBOSS建立JMS应用实例

    总结来说,JBOSS中的JMS应用实例涉及了JMS的基本概念、JBOSST的配置、代码编写以及具体的应用场景。通过实践这些步骤,开发者可以掌握如何在JBOSST环境中利用JMS进行高效的数据通信。同时,提供的文档和项目文件为...

    JMS的中文教程(Java的消息驱动)

    掌握JMS的基本概念、架构和应用场景对于任何希望在分布式环境中构建稳定、高性能系统的Java开发者来说都是至关重要的。此外,随着技术的发展,JMS也在不断进化,例如引入了更多的安全特性和消息分组的支持等。这些都...

    JMS1.1规范(中文)

    JMS1.1规范的核心概念主要包括以下几点: 1. **消息**:JMS中的消息是数据传输的基本单元,它包含了要在应用程序之间传递的信息。消息可以是文本、二进制数据或其他复杂类型的数据。 2. **消息队列与主题**:JMS...

    深入掌握JMS——ActiveMQ 十一章

    #### JMS基本概念与重要知识点解析 **JMS(Java Message Service)简介** JMS(Java消息服务)是一种广泛应用于企业级应用中的消息中间件协议,它为应用程序提供了一种高效、可靠的方式来发送和接收消息。JMS支持...

    一个很好的jms教程

    1. **消息模型**:JMS支持两种基本的消息模型——点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)。点对点模型中,消息从一个生产者发送到一个队列,由一个或多个消费者接收;而在发布/...

Global site tag (gtag.js) - Google Analytics