什么情景下应当考虑使用JMS(Java Message Service )技术

        JMS,Java Message Service,是JavaEE平台最重要的规范之一, 也是企业开发中经常使用到的异步技术

一、JMS和MQ的定义

Java消息服务 ( JavaMessaging Service, JMS ) 是一种允许应用程序创建、发送、接受和读取消息的Java API 。

Java 消息服务(JMS))是集成到 J2EE 中的一部分,它使得 MQ 服务可以为任何 J2EE 应用程序所用。即JMS是用于访问MQ中间件的API,在实际应用中JMS+MQ服务器(有时也被称为面向消息的中间件(MOM))相结合来完成消息排队类型的应用程序开发。

MQ 服务器是什么?用 MQ 的说法,Message(消息)只是一个字节流(这个字节流可以是一个 XML 文档、一个序列化的 Java 对象、一个文本字符串或甚至是一条空消息),对消息的解释留给应用程序域来做,MQ 服务器不对消息施加任何语义和结构限制。消息存储在MQ服务器的消息队列中,MQ 服务器允许您使用JMS将消息加入到队列以及从队列中取走消息。

JMS,它是一种允许 Java 应用程序通过标准化的接口访问范围广泛的 MQ 服务器(或者,按照 JMS 的说法,是提供程序)的 API,就象 JDBC 允许Java程序通过一个公共接口访问许多不同的数据库服务器一样。基本所有的 J2EE 容器都包含 JMS 提供程序;没有 J2EE 容器也可以使用 JMS;市场上有几种独立的 JMS 提供程序实现。此外,EJB 2.0 规范引入了一种新的 EJB 类型 ― 消息驱动 bean ― 它使得创建利用实体和会话 bean 的消息驱动的组件非常容易。

二、JMS的应用场景

有一些最适合于使用消息排队的常见用法模式。当在您的应用程序中看到这些模式之一时,您应该考虑使用消息传递。

1.面向事件的应用程序
        高度面向事件的应用非常适于使用 MQ 技术。这些包括财务服务应用程序(请考虑一个证券交易所,它显示股票价格更新,根据价格变化或其它订单的执行来启动交易,报告订单状态等等),新闻发送服务应用程序以及供应链应用程序。在金融市场中,必须对事件进行迅速处理;当发生了重要的事情时,您希望在它一发生时就得到通知。
2.轮询数据库
        数据库在持久存储数据方面是非常优秀的,但是存储瞬时数据并在数据改变时通知我们却不是它们的长处。
虽然它不是高效的,但是轮询数据库却非常常见。每个机场的显示监视器不断轮询数据库以更新它们显示的信息。有许多出纳窗口的银行经常使用电子信号来指示下一个空闲出纳员的位置。电子商务站点内的订单处理系统可能轮询数据库以查看是否有任何新订单需要处理。或者保险索赔工作流系统可能轮询以查看是否有任何新的索赔可以分配给空闲的索赔调解人(claims adjusters)。
所有这些轮询都产生了许多额外的工作。如果有许多实体频繁地轮询(并且如果它们想要迅速地反映数据的更新,它们就必须这么做),就可能给数据库服务器和网络造成很大的负载。在大多数时候,轮询不返回数据,更糟的是,会返回我们已经见过的数据,但又必须再次处理或标识为已经处理过。
        数据库不只是为轮询或事件而设计的。如果在事件发生或数据更改之后必须采取相对迅速的行动,那么异步消息传递是完成这一任务更容易和更有效的方法。无论何时在需要知道更新而轮询数据库时,请考虑使用 JMS 来替代数据库。
3.工作流
        根据工作流门户网站(它是 Workflow Management Coalition 和 Workflow And Reengineering International Association 共同努力的结果)的定义,工作流是“……整个或部分商业过程的自动化,在这一过程中,根据一套过程规则,将文档、信息或任务从一个参与者传递给另一个参与者。”MQ 解决方案特别适合于工作流应用程序(例如文档路由和批准、保险索赔处理等等),这是因为 MQ 技术对如何处理大量使用纸张的办公室里的工作流问题进行了精细的建模,在这种办公室内每个参与者都有一个收件箱和发件箱。
工作流应用程序的特征是有许多代理(代理可以是人,自动处理步骤甚至是物理装备,例如机器和打印机),每个代理都执行任务的一小部分并将其传递给由业务规则所确定的下一代理。请考虑批准和支付电子支出报表这一过程。雇员创建并提交报表,接下来该报表需要由雇员的经理批准(如果美元数目超出了规定的数目,则需要由另外一级管理部门批准)。接下来到了人力资源部,在那里对它进行核查以确定其准确性,还要进行细查以确保该开支是有效的业务支出并符合公司的政策。如果批准了,将会创建支付请求并安排打印支票。这之后,可能进入财务部,在那里单个收费记录将会应用到适当的帐户和成本中心。在这些阶段的每一个,支出报表都可能被弹回给雇员或雇员经理。
        在构建工作流应用程序过程中,主要设计目标是确保工作能够从一个代理迅速地传入到另一个代理,并确保任务不崩溃。MQ 服务器同数据库一起携手工作,它使得向您的应用程序中构建灵活、可伸缩、可扩展的工作流处理变得容易。

参考资料:

1. Java 理论与实践: 应该在下一个企业应用程序中使用 JMS 吗?

http://www.ibm.com/developerworks/cn/java/j-jtp/part1/index.html

2.  面向Web的JMS应用系统

http://www.knowsky.com/366790.html

3. JMS与Java消息中间件

http://www.javabloger.com/article/spring-jms-j2ee-middleware.html

4.  JMS开源框架ActiveMQ入门介绍

http://java.9sssd.com/javafw/art/666

什么情景下应当考虑使用JMS(Java Message Service )技术相关推荐

  1. JMS : Java Message Service (Java消息服务)之一 [转]

    为什么80%的码农都做不了架构师?>>>    1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...

  2. jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

    前言 JMS 介绍:JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分 ...

  3. 什么是JMS(Java Message Service消息服务)

    JMS的定义 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息 ...

  4. Java Message Service(JMS)总结

    一.JMS是个什么鬼 1.百度百科解释:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之 ...

  5. Java 消息服务(Java Message Service

    Java 消息服务( Java Message Service ,简称 JMS )是企业级消息传递系统,紧密集成于 Jboss Server 平台之中.企业消息传递系统使得应用程序能够通过消息的交换与 ...

  6. Java Message Service(ActiveMQ 1)

    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信 ...

  7. JMS Java消息服务(Java Message Service)

    JMS 在一些场景下RPC的同步方式可能不太适合业务逻辑的处理,并且这种方式在某些场景下会导致业务的紧耦合. 基于异步交互模型的JMS解决了RPC产生的紧耦合问题,它提供了一个可以通过网络访问的抽象消 ...

  8. JMS(Java Messaging Service)基础

    1.基础结构 1)图表结构 2)各部分介绍 ConnectionFactory 封装了一组连接配置参数,它已被定义为管理员.每个连接工厂都是队列(Queue)连接工厂或主题(Topic)连接工厂接口的 ...

  9. java jms框架_JMS (Java Message Service)

    19.1. 简介 Spring提供了一个用于简化JMS API使用的抽象框架,并且对用户屏蔽了JMS API中1.0.2和1.1版本的差异. JMS的功能大致上分为两块,叫做消息制造和消息消耗.Jms ...

最新文章

  1. NSLog不打印设置
  2. 在Matlab中实现与ORACLE数据库的连接操作
  3. git - 简明指南
  4. python两个元组相加_《第5章 Python 列表与元组》5.1.3 序列相加(Adding)!
  5. 免费mysql空间_php+mysql免费空间
  6. 24 PP配置-生产车间控制-定义工单号码范围
  7. java集成Cplex:Cplex下载、IDEA环境搭建、docker部署
  8. imap服务器怎么填写 网易邮箱,ipad设置163邮箱教程 如何设置163邮箱【详细介绍】...
  9. Revel框架的搭建与部署教程
  10. oracle字段小数位数,Oracle修改number类型字段的小数位数
  11. 怎么布置mysql数据库_MySQL数据库的安装,配置
  12. 基于高反差保留的锐化
  13. 战意显示与服务器断开连接,战意服务器地址
  14. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java康健医药公司进销存管理22jao
  15. 阿里测试7年经验,从功能测试到自动化测试,我整理的超全学习指南
  16. 如何利用积分系统提升社群活跃度与留存率?
  17. 可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)...
  18. Installshield6.x基础入门(一)创建工程
  19. INFP型人格适合选择哪些专业?
  20. 使用CMake编译Libigl错误问题解决方法

热门文章

  1. HaaS EDU K1 学习路径图(从新手到专家)
  2. linux查看文件版本,Linux下查看版本号的命令
  3. SAP ABAP 编号范围对象(SNRO)的监控管理和开发应用
  4. 基于superSlide的轮播-实用插件教程-源码-
  5. 计算机教室 编程设备,机电一体化实训设备、机电一体化实验室设备、机电一体化数控编程实验室...
  6. 华为p10 鸿蒙,华为强力打造鸿蒙系统生态!终于走出“试验田”了:成功接入服务...
  7. 模块度计算python代码_LPA算法C++实现及模块度计算
  8. centos忘记root密码怎么办
  9. python——老鼠打洞问题
  10. ubuntu14.04 OpenNI2 安装