Java理论与实践: 应该在下一个企业应用措施中利用JMS吗?
当前位置:以往代写 > JAVA 教程 >Java理论与实践: 应该在下一个企业应用措施中利用JMS吗?
2019-06-14

Java理论与实践: 应该在下一个企业应用措施中利用JMS吗?

Java理论与实践: 应该在下一个企业应用措施中利用JMS吗?

副标题#e#

最近几年,开拓人员可以更遍及地获得企业动静列队(MQ)产物。适内地使 用 MQ 技能常常可以改进应用措施的组织、机能和可伸缩性。Java 动静处事 (Java Message Service (JMS))是集成到 J2EE 中的一部门,它使得 MQ 处事 可觉得任何 J2EE 应用措施所用。在本文(也是本专栏系列的第一部门)中, Brian 概述了在 Java 应用措施中利用动静列队的一些长处,并探讨了可以或许从 MQ 技能中获益最大的问题范例。请在 论坛上(可能通过单击本文顶部或底部的 接头)同作者及其他读者分享您对本文的想法。

动静列队(MQ)东西没有数据库东西(譬喻干系(SQL)数据库)为人所知或 为人领略,数据库东西是险些所有企业应用措施和大量较量简朴的应用措施中的 要害组件。开拓人员老是可以回收多种范例的数据产物,其范畴包罗从便宜的、 只能在台式机上利用的数据库(譬喻 dBase 或 Microsoft Access),到事情组 数据库处事器(譬喻 Sybase SQL/Anywhere),再到企业数据库处事器(譬喻 DB2 或 Oracle)。无论您的项目是什么样子的,总有一个价值、机能及成果都 适合的数据库产物可供您利用。

和数据库相似,MQ 产物有时被称为面向动静的中间件(MOM),已经呈现相 当一段时间了。然而,直到最近,MQ 处事器还一直是昂贵的、只能被资金最充 足的企业开拓人员所用的高端产物。功效,只有很是少的开拓人员可以享受在其 应用措施中利用动静通报所带来的长处。

普通化的动静列队

幸运的是,这一状况正在开始改变;此刻市场上已经呈现了几种价值较低的 MQ 处事器。1997 年,Microsoft 宣布了 MSMQ,它是一个事务性动静列队产物 ,作为 Windows NT Server 中的集成部门 ― 无需特另外许可用度。Sun 将 JMS API 包罗在最初的 J2EE 类型中,这极大地促进了动静通报的普通化。在 J2EE 类型的版本 1.3 中,所有的 J2EE 容器都要求包括 JMS 提供措施 (provider)。

JMS,也就是 Java 动静处事,它是一种答允 Java 应用措施通过尺度化的接 口会见范畴遍及的 MQ 处事器(可能,凭据 JMS 的说法,是提供措施)的 API ,就象 JDBC 答允措施通过一个民众接口会见很多差异的数据库处事器一样。大 大都 J2EE 容器包括 JMS 提供措施;未来,所有 J2EE 容器都将包括 JMS 提供 措施。没有 J2EE 容器也可以利用 JMS;市场上有几种独立的 JMS 提供措施实 现。另外,EJB 2.0 类型引入了一种新的 EJB 范例 ― 动静驱动 bean ― 它使 得建设操作实体和会话 bean 的动静驱动的组件很是容易。

既然我们都可以利用 JMS 处事,我们就应该学会在应用措施中利用动静通报 的本领。Willy Farrell 是 IBM 的一名电子商务设计师,他写了一本优秀的关 于利用 JMS 的先容性教程(参阅 参考资料)。它涉及建设动静和行列的根基知 识,以及对动静分别优先级、检索动静和编码动静的所有选项。

动静通报和数据库起了彼此增补的浸染,在很多环境下,同时利用动静通报 和干系数据库可以发生比只利用它们中的一个好得多的办理方案。

汗青上,曾经将 MQ 处事器用于面向事件的应用措施(譬喻财政处事应用程 序)可能作为一种与完全差异的系统举办彼此操纵的方法(譬喻毗连完全差异的 数据库应用措施或将一个企业同另一个在供给链网络中的企业相毗连)。术语“ 面向动静的中间件”常常应用于 MQ 处事器,它强调 MQ 技能主要用途是毗连完 全差异的系统。然而,跟着 MQ 产物本钱的低落,很多其它应用措施此刻也可以 从动静列队中获益。

MQ 处事器做什么?

用 MQ 的说法,动静只是一个字节约(这个字节约可以是一个 XML 文档、一 个序列化的 Java 工具、一个文本字符串或甚至是一条空动静)。对动静的表明 留给应用措施域来做;MQ 基本布局差池动静施加任何语义和布范围制。动静存 储在行列里,MQ 处事器答允您将动静插手到行列以及从行列中取走动静。

到今朝为止,动静行列听起来很象简朴的链表。从其最简朴形式来说,简直 是这样的,可是企业 MQ 处事器通过将一些成果特性封装进这一链表打点而加强 了其成果:

节制谁可以向行列中写以及谁可以从行列中读的安详性

网络接口,它答允动静出产者和消费者位于差异的处所

事务性支持,这样入队和出队操纵都具有事务特性:原子性、一致性、断绝 性以及可耐久性

漫衍式事务支持,这样行列操纵可以同其它资源打点器(如 SQL 数据库)一 起介入漫衍式事务

耐久存储性

负载平衡

妨碍转移

打点


#p#副标题#e#

MQ 的优点

#p#分页标题#e#

MQ 的优点源自动静处理惩罚的异步性质所带来的固有的 松散耦合。一个实体向 行列宣布动静与另一个实体撤除并处理惩罚动静的进程是完全疏散的。这两个实体无 须同时运行,也无须位于同一系统上,甚至无须知道另一个实体的标识;它们仅 凭据本身的时间表同行列交互。它们只须就互相将吸收的动静的名目告竣一致; 另外,它们无须知道对方的任何其它工作。

松散耦合有很多利益。它提供了一个自然的机制,将一个事情单位分成更小 的、独立的组件,这种机制在处理惩罚请求的各阶段之间隐式地建设了抽象。这种细 分答允我们利便地一个接一个地抽象每个组件的实现,更好地权衡和打点每个组 件对资源的操作,可能利用提供具有雷同成果的组件替换一个组件而无需改变其 它组件。

JMS 类型要求 JMS 提供措施也实现 宣布和订阅成果,该成果答允您建设不 同的、应用措施界说的且名称为 主题的通道,并答允单个实体订阅这些主题。 列队到主题的动静自动安排在任何订阅过该主题的实体的专用行列中。主题在财 务处事或新闻发送应用措施中执行有代价的排序成果。譬喻,固然有 5000 多种 股票在美国的主要生意业务所生意业务,但每个投资者大概只对个中的 30 种股票感乐趣 。因此您可觉得每个订单标记建设一个主题,让用户订阅他们感乐趣的标记,然 后让 MQ 引擎执行仅仅显示每个投资者想要的报价,制止发送反复的股价。用 SQL 数据库实现这一进程要坚苦得多。

经典的 MQ 用法模式

有一些最适合于利用动静列队的常见用法模式。当在您的应用措施中看到这 些模式之一时,您应该思量利用动静通报。

面向事件的应用措施

高度面向事件的应用很是适于利用 MQ 技能。这些包罗财政处事应用措施( 请思量一个证券生意业务所,它显示股票价值更新,按照价值变革或其它订单的执行 来启动生意业务,陈诉订单状态等等),新闻发送处事应用措施以及供给链应用措施 。在金融市场中,必需对事件举办迅速处理惩罚;当产生了重要的工作时,您但愿在 它一产生时就获得通知。

轮询数据库

数据库在耐久存储数据方面长短常优秀的,可是存储瞬时数据并在数据改变 时通知我们却不是它们的优点。

固然它不是高效的,可是轮询数据库却非经常见。每个机场的显示监督器不 断轮询数据库以更新它们显示的信息。有很多出纳窗口的银行常常利用电子信号 来指示下一个空闲出纳员的位置。电子商务站点内的订单处理惩罚系统大概轮询数据 库以查察是否有任何新订单需要处理惩罚。可能保险索赔事情流系统大概轮询以查察 是否有任何新的索赔可以分派给空闲的索赔调整人(claims adjusters)。

所有这些轮询都发生了很多特另外事情。假如有很多实体频繁地轮询(而且 假如它们想要迅速地反应数据的更新,它们就必需这么做),就大概给数据库服 务器和网络造成很大的负载。在大大都时候,轮询不返回数据,更糟的是,会返 回我们已经见过的数据,但又必需再次处理惩罚或标识为已经处理惩罚过。

数据库不可是为轮询或事件而设计的。假如在事件产生或数据变动之后必需 采纳相对迅速的动作,那么异步动静通报是完成这一任务更容易和更有效的要领 。无论何时在需要知道更新而轮询数据库时,请思量利用 JMS 来替代数据库。

事情流

按照事情流派别网站(它是 Workflow Management Coalition 和 Workflow And Reengineering International Association 配合尽力的功效)的界说,工 作流是“……整个或部门贸易进程的自动化,在这一进程中,按照一套进程法则 ,将文档、信息或任务从一个参加者通报给另一个参加者。”MQ 办理方案出格 适合于事情流应用措施(譬喻文档路由和核准、保险索赔处理惩罚等等),这是因为 MQ 技能对如那里理惩罚大量利用纸张的办公室里的事情流问题举办了风雅的建模, 在这种办公室内每个参加者都有一个收件箱和发件箱。

事情流应用措施的特征是有很多署理(署理可以是人,自动处理惩罚步调甚至是 物理装备,譬喻呆板和打印机),每个署理都执行任务的一小部门并将其通报给 由业务法则所确定的下一署理。请思量核准和付出电子支出报表这一进程。雇员 建设并提交报表,接下来该报表需要由雇员的司理核准(假如美元数目超出了规 定的数目,则需要由别的一级打点部分核准)。接下来到了人力资源部,在哪里 对它举办核查以确定其精确性,还要举办细查以确保该开支是有效的业务支出并 切合公司的政策。假如核准了,将会建设付出请求并布置打印支票。这之后,可 能进入财政部,在哪里单个收费记录将会应用到适当的帐户和本钱中心。在这些 阶段的每一个,支出报表都大概被弹回给雇员或雇员司理。

#p#分页标题#e#

在构建事情流应用措施进程中,主要设计方针是确保事情可以或许从一个署理迅 速地传入到另一个署理,并确保任务不瓦解。MQ 处事器同数据库一起联袂事情 ,它使得向您的应用措施中构建机动、可伸缩、可扩展的事情流处理惩罚变得容易。

#p#副标题#e#

利用 MQ 以从要害路径去除风险大的操纵

在电子商务或供给链应用措施中的吸收、核准和填写订单同事情流应用措施 有很多配合之处,固然大大都步调涉及的是电子参加者而不是人。吸收并推行订 单大概会包括下列步调中的一些或全部:

吸收订单并将其存储在数据库中。

对付消费者顾主,验证信用卡。

对付贸易顾主,通过信用陈诉署理处或通过您公司的信用部分查抄该顾主的 信用。

执行一些欺骗财核查阐明。

核查库存。

在有多个推行中心的环境下,抉择由哪其中心填写该订单。

向顾主发送一封确认电子邮件。

向顾主的销售代表发送一个通知。

生成挑选列表并将其交付给推行中心。

交付订单。

向用户收费并给其开单据。

由于您不想顾主在为获取确认号码和收据而单击“Buy”之后等好久,因此无 论在提交之后执行哪一条代码,该代码路径都应该简短而且有可预见的执行时间 。可是这些步调中的很多步调都需要会见一些资源,这些资源在客户下订单时可 能可用也大概不行用,可能这些资源的响应时间大概无法预料。在这种环境下, 应该从要害路径去除它们;让订购的启动动态配置事件链,而通过将提交步调的 事情减到绝对最小来开始订单,来尽大概快地利用户离开轮回。除了将给顾主一 个更好的用户经验之外,将订单处理惩罚分成多个离散的(较短)的步调还改造了资 源操作并淘汰了竞争 ― 这意味着事务更短(因此锁定也释放得更早),而且在 一步(譬喻网络和数据库毗连)中所用到的资源也释放得更早。

在订单处理惩罚进程中,最不行预见的步调之一是发送确认电子邮件。邮件处事 器常常会拥塞,大概会要好长时间才气吸收一条动静,也大概完全拒绝毗连。如 果顾主的邮件处事器拒绝确认动静,那么您就想要稍后从头实验发送该动静。这 样,发送确认电子邮件就“有风险”,这是因为第一次发送大概不乐成,可能发 送需要很长时间来处理惩罚,而您又不想让顾主(或有关这件事的任何其它的对象) 一直比及确认到来。雷同地,库存大概存储在同订单处理惩罚疏散的数据库中(库存 数据库大概由一个外包的推行处事拥有),而且在订购时大概不行用。可能信用 部分大概在礼拜五不上班。

通过利用动静行列来存储暂挂简直认电子邮件、库存查抄可能信用查抄,您 可以将“有风险的”操纵同进程的其余部门疏散,因此也使进程的其余部门制止 了操纵失败或耗费很长时间的风险。由于每个处理惩罚步调只完成一项简朴的任务, 因而也将极大简化了每个任务的错误处理惩罚。

竣事语

假如应用恰当,动静列队技能通过将任务解析成子任务,可以极大地简化复 杂任务的处理惩罚,还能增加应用措施的机动性和可伸缩性。自 J2EE 版本 1.3 起 ,每个 J2EE 容器都将包括一个 JMS 提供措施,这意味着我们都能在我们的应 用措施中操作异步动静列队的强大成果。

下个月,我们将摸索 Java 事务处事(Java Transaction Service (JTS)) 的事情道理了。固然它不如 EJB 或 J2EE 的其它元素引人留意,但 JTS 大概是 J2EE 的最要害部门 ― 事务使我们可以或许构建靠得住的漫衍式应用措施。我们将在 此后的某篇专栏文章中重述 MQ,而且构建一个事情流应用措施,以演示动静排 队和干系型数据库是如何彼此协作和取长补短的。

    关键字:

在线提交作业