作为网络服务的一部分说A,我需要打电话给另一个网络服务说B。
给予A的呼叫者的响应不应该依赖于B,即它应该将响应返回给呼叫者,而不管B的结果如何,考虑到B可能需要一些时间。
呼叫A和B的系统都不同。我如何实现这一目标?
注意:使用RESTful web-services / Java
答案 0 :(得分:3)
客户端应异步调用 Web Service A 操作。
Web服务也应该异步调用 Web Service B 操作。
这样,无论 Web Service B 的结果如何,客户端都将始终收到响应。
大多数REST框架已经具有异步调用支持:
一旦发布, JAX-RS 2.0 将支持asynchronous HTTP。
使用 Apache CXF :Asynchronous Client HTTP Transport
使用 Resteasy :Asynchronous HTTP Request Processing
答案 1 :(得分:0)
如果您不介意第三方库使用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
答案 2 :(得分:0)
根据给定的要求,
从客户端到服务A的呼叫可以是您的情况下的同步Restful呼叫。 从服务A到服务B的呼叫是异步的。
因此,请像往常一样在客户端与服务A之间使用restful连接。
在致电服务A的情况下 - >您需要使用的服务B,JMS概念,请求请求和响应队列。请参考http://docs.oracle.com/cd/E14571_01/web.1111/e15184/asynch.htm 这些通常实现为2个单向请求。