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

时间:2011-02-11 09:28:35

标签: java rest soap asynchronous

我们有一个需要使用SOAP / REST Web服务层补充/前端的Java API。

使用
实现跨进程/服务器边界的异步调用需要什么? a)SOAP Web服务
b)RESTful webservices

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

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

任何例子?陷阱?

谢谢,

7 个答案:

答案 0 :(得分:1)

你的问题不明确。我正在解释您的问题,因为您希望服务器端代码以异步方式调用远程REST Web服务。如果是这样,那么你最好的选择是使用java.util.concurrent的Futures功能,它将完全按照你的意愿行事。如果我对这个问题的解释是错误的,请更新您的问题,确切地说,异步操作需要发生在哪里。

答案 1 :(得分:1)

Akka http://akka.io/

伟大的框架,卓越的表现 - 以下是他们的主张:

“”“

更简单的并发

使用Actors,STM& amp;编写更简单的正确并发应用程序。事务处理器。

事件驱动架构

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

真正的可扩展性

使用异步消息传递在多核或多个节点上扩展。

容错

拥抱失败。使用Erlang风格的Actor主管层次结构编写自我修复的应用程序。

透明远程处理

Remote Actors为您提供高性能的透明分布式编程模型。

Scala& Java API

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

答案 2 :(得分:1)

Async Http Client是一个专为此类问题设计的开源库。它利用了未来并包含了许多细节,并且无需进行异步调用。

作者非常好getting started guide并且有一个有效的discussion group。作者是一位非常有才华的开发人员,该项目正在不断发展。

来自文档:

  

该库使用Java非阻塞I / O.   用于支持异步   操作。默认异步   提供者是建立在Netty之上的   (http://www.jboss.org/netty),Java   NIO客户端服务器套接字框架   来自JBoss,但该库暴露了一个   允许的可配置提供程序SPI   轻松插入其他框架。

答案 3 :(得分:1)

@Vivek

  

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

事实并非如此。请继续阅读有关AJAX的信息: - )

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

在您的情况下,它看起来如下: 1.您正在寻找在WSDL(REST或SOAP或两者)中创建包装器合同,如果您的客户端不仅仅是浏览器(AJAX)(我的意思是您有来自服务器端的采用者),那么,对于JAX -WS - >你可以创建一个@CallBack end-ponint(http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/callback.html) 或
如果它是需要从采用者(服务器端)调用的REST端点,请使用jAX_RS 2.0功能

注意:上面假设它是指向点但是以异步方式

以下是一些选项:

  1. 如果您想要异步调用REST或SOAP或其他函数,可以使用workManager API(JSR) 或
  2. 使用JMS并在需要时使用请求 - 回复模型(短期运行)并且并行调用多个端点
  3. 使用WS-BPEL(仅限WSDL端点) - 这也是OASIS标准
  4. 使用SCA(任何具有任何技术的组件),可以包含在BPEL引擎(如Apache ODE或IBM流程服务器和其他组件)中协同运行的WS-BPEL组件(无状态或有状态)的程序集。这是标准的