作为网络服务的一部分,比如 A,我需要调用另一个网络服务,比如 B。
给予 A 的调用者的响应不应依赖于 B,即它应该将响应返回给调用者,而不管 B 的结果如何,考虑到 B 可能需要一些时间。
调用 A 和 B 的系统都是不同的。我如何实现这一目标?
注意:使用 RESTful 网络服务/Java
作为网络服务的一部分,比如 A,我需要调用另一个网络服务,比如 B。
给予 A 的调用者的响应不应依赖于 B,即它应该将响应返回给调用者,而不管 B 的结果如何,考虑到 B 可能需要一些时间。
调用 A 和 B 的系统都是不同的。我如何实现这一目标?
注意:使用 RESTful 网络服务/Java
客户端应该异步调用Web Service A操作。
Web 服务 A也应该异步调用Web 服务 B操作。
这样,无论Web Service B的结果如何,客户端都将始终收到响应。
大多数 REST 框架已经支持异步调用:
一旦发布,JAX-RS 2.0将支持异步 HTTP。
使用Apache CXF:异步客户端 HTTP 传输
使用Resteasy:异步 HTTP 请求处理
根据给定的要求,
在您的情况下,从客户端到服务 A 的调用可以是同步的 Restful 调用。从服务 A 到服务 B 的调用是异步的。
因此,像往常一样在客户端到服务 A 之间使用宁静的连接。
在调用服务 A -> 服务 B 的情况下,您需要使用 JMS 概念,例如请求和响应队列。请参考http://docs.oracle.com/cd/E14571_01/web.1111/e15184/asynch.htm 这些通常实现为 2 单向请求。
如果您不介意第 3 方库使用 jetty-client:http ://www.supermind.org/blog/1023/non-blocking-nio-http-requests-in-java-with-jettys-httpclient
这是maven包描述: http: //mvnrepository.com/artifact/org.eclipse.jetty/jetty-client