1.3 消息传送模型
Messaging Models
JMS支持两类消息传送模型:点对点模型和发布/订阅模型。有时候,又称这些消息传送模型为消息传送域。点对点消息传送模型和发布/订阅消息传送模型经常分别缩写为p2p和Pub/Sub。在本书中,这二者的原文和缩写都会用到。
简而言之,发布/订阅模型设计用于一对多(one-to-many)消息广播,而点对点模型则设计用于一对一(one-to-one)消息传送(参见图1-4)。
从JMS的视角来看,消息传送客户端称为JMS客户端(JMS client),而消息传送系统则称为JMS提供者(JMS provider)。一个JMS应用程序是由多个JMS客户端和(通常是)一个JMS提供者所组成的业务系统。
此外,生产消息的JMS客户端称为消息生产者(message producer),而接收消息的JMS客户端则称为消息消费者(message consumer)。一个JMS客户端可以既是消息生产者,又是消息消费者。当我们使用术语消费者(consumer)或生产者(producer)时,我们分别是指消费或生产消息的一个JMS客户端。在全书中,我们都会用到这个术语。
1.3.1 点对点模型
Point-to-Point
点对点消息传送模型允许JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接收消息。在点对点模型中,消息生产者称为发送者(Sender),而消息消费者则称为接收者(receiver)。传统上,点对点模型是一个基于拉取(Pull)或基于轮询(polling)的消息传送模型,这种模型从队列中请求消息,而不是自动地将消息推送到客户端。点对点消息传送模型的一个突出特点就是:发送到队列的消息被一个而且仅仅一个接收者所接收,即使可能有多个接收者在一个队列中侦听同一消息时,也是如此。
点对点消息传送模型既支持异步“即发即弃(fire and forget)”消息传送方式,又支持同步请求/应答消息传送方式。点对点消息传送模型比发布/订阅模型具有更强的耦合性,发送者通常会知道消息将被如何使用,而且也会知道谁将接收该消息。举例来说,发送者可能会向一个队列发送一个证券交易订单并等待响应,响应中应包含一个交易确认码。这样一来,消息发送者就会知道消息接收者将要处理交易订单。另一个例子就是一个生成长时间运行报告的异步请求。发送者发出报告请求,而当该报告准备就绪时,就会给发送者发送一条通知消息。在这种情况下,发送者就会知道消息接收者将要处理该消息并创建报告。
点对点模型支持负载均衡,它允许多个接收者侦听同一队列,并以此来分配负载。如图1-4所示,JMS提供者负责管理队列,确保每条消息被组内下一个可用的接收者消费一次,而且仅仅一次。JMS规范没有规定在多个接收者中间分发消息的规则,尽管某些JMS厂商已经选择实现此规则来提升负载均衡能力。点对点模型还具有其他优点,比如说,队列浏览器允许客户端在消费其消息之前查看队列内容——在发布/订阅模型中,并没有这种浏览器的概念。第4章会详细介绍点对点消息传送模型的更多细节。
1.3.2 发布/订阅模型
Publish-and-Subscribe
在发布/订阅模型中,消息会被发布到一个名为主题(topic)的虚拟通道中。消息生产者称为发布者(publisher),而消息消费者则称为订阅者(subscriber)。与点对点模型不同,使用发布/订阅模型发布到一个主题的消息,能够由多个订阅者所接收。有时候,也称这项技术为广播(broadcasting)消息。每个订阅者都会接收到每条消息的一个副本。总地来说,发布/订阅消息传送模型基本上是一个基于推送(push)的模型,其中消息自动地向消费者广播,它们无须请求或轮询主题来获得新消息。
发布/订阅模型的去耦能力要比p2p模型更强,消息发布者通常不会意识到有多少订阅者或那些订阅者如何处理这些消息。举例来说,假定每次在Java应用程序发生异常时,向一个主题发布一条消息。发布者的责任仅仅是广播发生了一个异常。该发布者不会知道,或者说通常也不关心如何使用该消息。例如,有可能是订阅者根据该异常向开发人员或支持人员发送了一封电子邮件,也有可能是订阅者收集不同类型的异常数目用于生成报告,甚至是订阅者根据异常的类型,使用这个信息来通知随叫随到(on-call)的技术支持人员。
在发布/订阅消息传送模型内部,有多种不同类型的订阅者。非持久订阅者是临时订阅类型,它们只是在主动侦听主题时才接收消息。而另一方面,持久订阅者将接收到发布的每条消息的一个副本,即便在发布消息,它们处于“离线”状态时也是如此。另外还有动态持久订阅者和受管的持久订阅者等类型。第2章和第5章会详细讨论发布/订阅消息传送模型的更多细节
- 大小: 9.6 KB
分享到:
相关推荐
根据企业应用程序间进行消息服务的实际需要,深入研究Java消息服务(Java Message Service,JMS)技术,结合其中的"发布/订阅式"和"点对点式"两种消息收发模式,提出了一个基于JMS体系结构的全新的消息服务模型,并针对股票...
在深入研究JMS(Java Message Service)与ActiveMQ之前,先要了解分布式系统中消息中间件(Middleware)的重要性以及它们是如何解决现有RPC技术的局限性。传统的RPC中间件技术,如CORBA、DCOM、RMI等,在分布式系统...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,主要用于在...通过下载并研究"JMS1.1规范(中文).pdf",开发者可以深入理解JMS的工作原理,提高其在企业级应用开发中的实践能力。
- **OpenJMS**:这是一个开源的JMS实现,遵循JMS 1.0.2规范,适合用于学习和研究JMS。 - **iLinkMQ**:由中国人开发的纯Java实现,完全支持JMS接口规范1.0.2,提供事务和可靠消息传输等功能,适用于企业级应用。 ...
标题中的“jms”指的是Java消息服务...在阅读给定的博文或研究JMS时,理解这些核心概念至关重要。如果你对JMS的具体实现、使用案例或最佳实践感兴趣,可以进一步探索相关的开源项目、文档或在线课程,以深化你的理解。
2. **发布/订阅(Publish/Subscribe)模型**:另一种JMS模型,消息发布到一个主题(Topic),多个订阅者可以订阅这个主题并接收消息。在这个例子中,可能展示了如何设置发布者和订阅者,以及消息如何广播到所有在线...
PDF文档中可能包含了以下章节:JMS简介、消息模型、消息格式、消息代理的配置与管理、JMS API详解、案例研究和实战演练等内容。通过学习这份教程,读者不仅可以了解JMS规范的理论,还能通过实例学习如何在实际项目中...
通过深入研究ActiveMQ的javax.jms源码,我们可以更深入地理解JMS的工作原理,了解如何利用ActiveMQ实现高效、可靠的消息通信。这有助于我们在实际项目中更好地应用和优化消息中间件,提升系统的稳定性和性能。 总之...
通过深入研究"jms study.pdf",你将能够掌握JMS的基本用法和高级特性,为构建基于消息的分布式系统打下坚实基础。在实际项目中,结合JMS与其他技术(如Spring框架)一起使用,可以实现高效、可靠的系统通信。
**题目**: JMS硕士论文六:JMS消息模型的研究与实现 **关键词**: JMS **来源**: JMS消息模型的研究与实现 **格式**: CAJ **页数**: 54 #### 知识点: - **模型特性分析**:深入分析JMS消息模型的特点,比如支持多种...
Spring JMS是Spring框架的一部分,它简化了在Spring应用中使用JMS的过程,提供了更高级别的抽象和方便的编程模型。 在这个"java jms 源码都在其中"的压缩包中,我们可以深入理解Java JMS和Spring JMS的内部工作机制...
1. **消息模型**:JMS支持两种消息模型,即点对点(Queue)和发布/订阅(Topic)。点对点模型中,消息由一个生产者发送到一个队列,然后由一个消费者接收。发布/订阅模型中,消息发布到一个主题,多个订阅者可以接收...
JMS主要用于异步消息传递和消息驱动Bean,支持点对点和发布/订阅两种消息模型,适合在分布式应用中实现松耦合的通信。而RMI则用于同步方法调用,适合在紧密耦合的系统中,直接在客户端和服务器之间传递方法调用和...
本篇论文研究了基于Java消息服务(JMS)和消息中间件(MOM)的信息交换系统。信息交换系统在杭州市政府办公数字化过程中发挥着至关重要的作用,特别是在处理大容量信息交换的需求方面。本文提出了一种基于JMS和MOM的...
- **主题(Topic)**:发布/订阅模型,一个主题可以有多个订阅者,消息被所有订阅者接收。 2. **JMS核心组件** - **消息代理(Message Broker)**:负责路由和存储消息,如ActiveMQ、RabbitMQ和Apache Qpid。 - ...
Java消息服务(Java Message Service,简称JMS)是...通过深入学习这个教程和研究源代码,开发者可以更好地理解JMS的工作方式,并能在实际项目中有效地利用JMS进行应用程序间的数据交换,提高系统的可靠性和扩展性。
【JMS优秀硕士学位论文】集合了多篇关于Java消息服务(Java Message Service,简称JMS)的学术研究成果,这些论文通常深入探讨了JMS在分布式系统中的应用、设计与实现。JMS是一种标准接口,允许应用程序创建、发送、...
通过对这些文件的深入研究,我们可以全面了解JMS和ActiveMQ在实际服务管理中的应用,包括它们如何促进服务之间的通信、如何保证消息的可靠传递,以及如何设计和实施一个服务总线管理系统。同时,文档中的详细设计和...
##### (二)基于Resource Description Framework的数据接口模型研究 其次,本文探讨了Resource Description Framework(RDF)的应用。通过RDF,可以形成一个基本的数据接口模型,将异构数据接口转换为RDF系统。...
JMS(Java Message Service)是Java平台中用于创建和管理异步消息的标准API,它允许应用程序之间通过消息传递...通过深入研究这些内容,你不仅可以掌握JMS的基本概念,还能了解到如何在实际环境中部署和管理JMS系统。