Java消息系统介绍
在这篇文章中,我将会讨论面向消息的中间件(Message Orientated Middleware) 以及如何通过JMS来实现。另外,我还将讨论适用于使用JMS的典型用例,以及用于讨论消息传递解决方案(如发布者/发送方,目的地/主题/队列, 订阅者/接收者)的不同术语。我将介绍两种消息拓扑:点对点和发布订阅。
数据访问层
在Java EE应用的典型架构中,数据访问层有很多和数据存储层通信的技术,比如Java Persistence API(JPI), Java Connector Architecture(JCA),这些技术将应用程序连接到了企业信息系统(EIS)和Java消息服务系统(JMS)
JMS用来做什么?
JMS用于在分布式系统中通过松耦合,异步,可伸缩性和安全的方式传递消息。应用程序通过以消息为导向的中间件发送和接收消息。 异步。意味着消息的发送方和接收方不需要同时与消息队列交互。因此,接收方可以在消息发送后的某个时间接收消息。
- 松耦合。 接收方和发送方相互不可见。
- 可伸缩。意味着系统的不同部分可以以不同的速率增长,并响应应用的负载。例如,在一个站点上突然出现了大量的活动导致通过中间件发送的消息极具增加,可以进行自动扩展。这样增加了系统的健壮性,否则很难应对这种突然增大的负载,应用程序可能会出现问题,或者直接挂掉了。
什么时候使用JMS?
依赖与使用场景来使用JMS,但是通常,至少会有以下一种情况。
- 应用程序应该能够在不需要立即响应消息的情况下发送消息。也许根本就不需要发送消息的响应或者就是单向通信。
- 发送方不依赖接收方的接收,因此很容易替换接收方。归结于需要将应用程序的部分解耦。 当接收方挂掉,应用程序应该能够继续保持工作,这是健壮性方面的考虑。
术语
在讨论JMS时,有一些有用的术语可以帮助我们传达我们的意图。
- destination. destination是消息发送的位置,并被称为topic或queue。这通常在JMS中定义为字符串值。应该给目的地提供表示其功能的名称。
- JMS系统有publisher或sender。这是消息来源的地方,也是消息终止的订阅者或接收者。这里使用的术语依赖于消息传递系统的拓扑,它可以是点到点,也可以是发布/订阅。
- 消息有一个有效载荷(payload),它包含了接收者提取和处理的有用信息。消息类型可以是文本、二进制、流、对象或属性映射。
点到点的消息拓扑结构
在点对点设置中,消息的来源被称为发送方,而目的地被称为队列。这里消息被发送到一个目的地,只有一个消息的实例被接收方接收。如果接收方关闭,则消息将在队列中保存,直到接收方重新启动并再次运行。发布订阅消息拓扑结构
在发布/订阅设置中,消息的来源被称为发布者,目标被称为主题。在这里,许多订阅者可以订阅一个主题,每个订阅者都接收到消息的一个实例。因此,一个消息被发送给许多等待的订阅者。如果订阅服务器关闭,它将不会接收到消息,当它再次运行时。