异步处理通信是面向服务架构(SOA)的重要部分,因为企业中的许多系统通信,尤其是跟外部系统通信本来就是异步的。Java消息服务(JMS)就是用来编写异步消息J2EE应用的API。使用JMS API的传统消息实现涉及到象这样的一些步骤:查找对列连接工厂、队列资源以及在实际发送和接受消息前,创建JMS会话(JMS session)。
Spring framework简化了用JEE组件(包括JMS)开发JMS应用的工作。它提供了一个模板机制来隐藏典型的JMS实现细节,所以开发者可以专注于消息处理任务而不用担心怎样创建、访问和释放JMS资源。
异步消息和SOA
现实世界中,大多数Web请求是同步处理的。例如,当用户登陆一个站点,他或她输入用户名和口令以及服务器识别登陆凭证。假如身份验证成功,程序让用户进入站点。这里,登陆请求从客户端被接受后,立即被处理。信用卡授权也是一个同步处理的例子;仅当服务器核实了发送进来的信用卡号是有效并且该客户的帐号有足够的信用额度后,才答应客户继续进行下一步动作。让我们来考察一下订单处理系统中的支付结算步骤。一旦系统核实了那个用户的信用卡信息是正确的,而且帐户上有足够的资金,那么不需要等到支付细节和转帐最终完成。支付结算用异步方式处理,如此客户便可以继续进行结帐处理。
与典型的同步请求相比,异步处理用于需要长时间来处理的请求。异步处理的另外一个例子是住房贷款处理应用中,处理提交到AUS(Automated Underwriting System)的贷款请求。贷款人提交贷款申请后,抵押公司发送请求到AUS取得信用历史信息。因为该请求要取得综合具体的信用报告如贷款人当前和过去的信用帐户,最近的支付以及其它金融具体信息,所以从请求到获得响应经常需要很长时间。对客户端程序来说开一个到服务器的连接并且长时间等待响应是没有意义的。于是就有了异步通信;也就是,一旦请求被提交,它就被放入队列里面并且客户断开服务器连接。然后,AUS服务从特定队列摘取请求,处理它,把结果消息放入另外一个消息队列。最后客户程序从消息队列摘取响应结果继续处理信用历史结果信息。
JMS
假如用过JMS的话,会发现它类似写JDBC或JCA代码。它有创建或检索JMS资源的样板代码,每当你需要编写一个新类来发送或接受消息时,都得重复编写那个样本代码。下面列出了传统JMS实现涉及的步骤:
1、创建JNDI初始上下文context;
2、从JNDI上下文获得队列连接工厂;
3、从队列连接工厂取得队列Queue;
4、创建一个Session对象;
5、创建一个发送或接受对象;
6、利用第5部创建的发送或接受对象发送或接受消息;
7、处理完消息后,关闭所有JMS资源。
如你所见,只有第6步是处理消息的步骤。其他步骤都只是治理JMS资源,与实际业务需求无关,但开发者不得不编写和维护那些附加步骤代码。
Spring JMS
Spring框架提供一个模板机制来隐藏Java API细节。JEE开发者可用JDBCTemplate和JNDITemplate类来分别访问后端数据库和JEE资源(数据源,连接池)。JMS没有异常。Spring提供了JMSTemplate类,所以开发者不必为JMS实现编写样本代码。当开发JMS应用时,,Spring提供了一下一些优势:
1、提供了一个JMS的抽象API,简化了JMS的使用。如:访问目的地(队列或主体)和出版消息到特定目的地。
2、JEE开发者不必关心JMS不同版本之间的差异(如JMS 1.0.2 同 JMS 1.1);
3、开发者不必特定地处理JMS异常,因为Spring为JMS代码抛出的任何JMS异常提供了一个unchecked异常。
一旦你在JMS应用中开始使用Spring,你将会欣赏到异步消息处理的简易性。Spring JMS
框架提供了各种java类使JMS开发变得简单。
分享到:
相关推荐
文件中包含protobuf-java-3.13.0.zip和protoc-3.13.0-osx-x86_64.zip两个文件,后者文件解压后bin目录中有protoc命令,将要转换的proto文件放入bin目录中,然后执行./protoc test.proto --java_out=/Users/Downloads...
总的来说,WSDL转JAVA类工具是Web服务开发中的重要辅助工具,它简化了服务的实现和消费过程,让开发人员能够专注于业务逻辑,而不是底层通信细节。理解WSDL的结构和代码生成的过程,对于进行Web服务开发是至关重要的...
Axis2支持多种Web服务标准,如SOAP、REST、WS-*等,并且提供了Java转WSDL和WSDL转Java的功能。 4. **使用Axis2进行Java转WSDL** - 首先,你需要在项目中包含Axis2的库,这通常包括axis2.jar和其他依赖的JAR文件。 ...
【标题】"onvif wsdl转成java代码"涉及的主要知识点是ONVIF协议、Web服务描述语言(WSDL)以及Java编程在服务端开发中的应用。 ONVIF(Open Network Video Interface Forum,开放网络视频接口论坛)是一种全球性的...
而Java消息服务(Java Message Service,简称JMS)则是一种标准API,用于在分布式环境中进行异步通信。当我们谈论"Spring集成Java消息服务"时,意味着我们要利用Spring框架的能力来实现基于JMS的消息传递功能。 **...
这个命令将根据WSDL文件生成一系列的Java类,包括服务接口、消息实体、异常类以及客户端代理类。你可以通过添加不同的选项来定制生成的代码,例如指定包名、启用抽象模式等。 4. **理解生成的代码**: 生成的Java类...
### Java消息服务详解 #### 一、引言 在现代软件开发中,特别是在分布式系统架构中,消息服务扮演着至关重要的角色。Java消息服务(Java Message Service,简称JMS)是一种标准的消息通信协议,用于应用程序之间的...
这将生成一系列的Java类,包括服务代理、消息处理器和服务实现类,它们可以直接在Java项目中使用。 3. **理解生成的Java代码** - **服务代理**:这是客户端与服务交互的主要接口,包含了调用服务方法的逻辑。 - ...
Java消息队列(Java Message Queue, 简称JMQ)是现代软件开发中的关键组件,尤其在微服务架构中,其重要性不言而喻。面试中,掌握消息队列的基本概念、工作原理和常见问题,对于求职者来说至关重要。以下是一些面试...
**Java Web服务构建SOA详解** Java Web服务(Java Web Services, JWS)是Java平台上的一个关键技术,用于构建Service-Oriented Architecture (SOA)。SOA是一种设计模式,它提倡通过独立的、可互操作的服务来构建...
`Message.java`文件可能是定义消息类的地方,它可能包含了消息头和消息体的字段,以及相应的序列化和反序列化方法。序列化是将Java对象转化为字节数组的过程,反序列化则是相反的操作。 在实际应用中,为了提高效率...
此外,它还可能讲解Java的JAX-WS(Java API for XML Web Services)框架,它是Java平台上的标准Web服务API,用于生成和消费SOAP消息。 第2章可能深入到实际的Java Web服务开发,如创建第一个简单的Web服务和客户端...
标题中的“protoc转java工具”指的是Google的Protocol Buffers(Protobuf)编译器protoc,它能够将定义的数据结构转换为不同编程语言的序列化格式,包括Java。这个工具在分布式系统、网络通信、数据存储等领域广泛...
SOAP消息通常包含一个封装了业务数据的主体部分,这部分可以映射到Java实体类。因此,理解XML与Java实体类之间的转换对开发SOAP Web服务非常重要。 总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java...
在Java编程领域,客户端-服务器(Client-Server)程序是一种常见的架构模式,它涉及两个主要组件:客户端应用程序和服务器端应用程序。在这个“Java客户端服务器程序学习笔记”中,我们将深入探讨这一主题,包括如何...
AMR常用于语音通话记录或语音消息,而MP3则是广泛应用于音乐播放的标准格式。 FFmpeg是一款开源的多媒体处理工具,支持各种音频和视频格式的编码、解码、转换和流处理。Java-ffmpegjave是FFmpeg的Java封装,使得...
然而,当Java应用程序需要与基于.NET框架的Windows Communication Foundation(WCF)服务进行交互时,就需要一种机制来实现这种跨平台的数据交换。本文将详细介绍如何在Java中调用WCF服务,实现不同程序间的数据传输...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...
WS-*(如SOAP、WSDL、UDDI)是Web服务的核心标准,它们定义了服务接口、消息交换和发现机制。书中可能深入探讨如何使用Java创建和消费Web服务,包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for ...