如何使用带Java的SOAP/REST Web服务异步回调

问题描述:

我们有一个Java API,需要使用SOAP/REST Web服务层进行补充/向前。如何使用带Java的SOAP/REST Web服务异步回调

怎样才能实现异步跨进程/服务器的界限呼叫使用
一)SOAP Web服务
B)的RESTful web服务

一些方法可能需要多次调用响应请求。

我们将使用Java/J2ee使用像CXF或Axis这样的库来实现SOAP /平安服务,或者使用Jax-RS/WS。

任何示例?陷阱?

谢谢,

+0

见http://*.com/questions/10877223/asynchronous-web-service-soap – cemsbr 2013-03-28 23:36:36

您的问题不清楚。我正在解释您的问题,因为您希望您的服务器端代码以异步方式调用远程REST Web服务。如果是这样,那么你最好的选择就是使用java.util.concurrent的Futures特性,它将完成你想要的。如果我对问题的解释是错误的,请更新您的问题,确切地说明异步操作需要发生的地方。

对于REST Web服务(除了GET)其他所有内容(POST/PUT ..)是异步的,它会返回操作的HTTP状态代码。

如果你想让GET也是异步的,那么你将不得不使用线程,我们在Spring框架中使用@Async注释(它在内部产生一个线程)做了一次。

从get返回回调URL作为响应并使用线程异步处理请求。

除此之外,对于SOAP/REST,一旦获得请求,您就可以将其发布到JMS队列中以使服务异步。

阿卡http://akka.io/

大框架,强大的性能 - 这是他们的权利:

“””

简单的并发

编写使用演员,STM &交易者简单正确的并发应用程序。

事件驱动架构

异步事件驱动架构的完美平台。永不阻止。

真正可扩展性多核或使用异步消息传递的多个节点

规模进行。

容错

拥抱失败。编写使用Erlang式Actor监督器层次结构自我修复的应用程序。

透明远程

远程演员为您提供高性能的透明的分布式编程模型。

斯卡拉&的Java API

Scala和Java的API以及Spring和Guice的整合。部署在您的应用程序服务器中或独立运行。 “””

Async Http Client是专为这种类型的问题,设计了一个开源库,它利用期货和包装了很多细节和麻烦了使异步调用的。

作者有一个很好的getting started guide并且有一个活跃的discussion group作者是一位非常有才华的开发者和项目正在不断发展

从文档:。

该库使用Java非阻塞I/O 来支持异步 操作。默认异步 提供商是建立在Netty的 (http://www.jboss.org/netty)时,Java NIO 客户端服务器插槽框架 从JBoss的顶部,但库暴露了 配置提供SPI允许 轻松插入其他框架。

@Vivek

GET是异步和其他HTTP方法 不是。

这是不正确的。请继续阅读AJAX :-)

实现异步操作的最佳方法之一是使用回调函数。对于REST API,API和Rest客户端的设计应该支持这一点。例如,客户端类应该自己传递或者它的内部类作为列表器。服务器端的Rest API应该维护请求标识并在地图中回调监听器。一旦处理完成,它可以根据来自地图的请求ID调用监听器的方法。

真正的问题:你为什么要称它为异步?查看了Java EE方面的并行处理解决方案之后,不建议您自己在容器内生成子线程。

在你的情况下,它看起来像下面这样: 1.你打算在WSDL(REST或SOAP或两者)中创建一个包装合同,如果你的客户不只是浏览器(AJAX)(我的意思是你如果是需要从采用者(服务器端)调用的REST端点,则可以创建一个@CallBack结束ponint(http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/callback.html) 或
-side),使用jAX_RS 2。0功能

注:以上假定它是点对点的,但在一个异步的方式

这里有几个选项:

  1. 如果你正在寻找调用REST或SOAP或其它一些功能异步,你可以使用WorkManager的API(JSR) 或
  2. 使用JMS和使用一个请求 - 应答模式,如果你需要它(短期运行)和平行
  3. 使用调用多个端点WS-BPEL(仅WSDL结束点) - 这是一个O ASIS标准以及
  4. 使用SCA(与任何技术的任何组分),其可以包含WS-BPEL组件的组件(无状态或有状态)在BPEL引擎如Apache ODE或IBM过程服务器和其它组件和运行领域展开合作。这是一个标准