我有一个要求,在某些情况下,作为Web服务[Java]的一部分,我在数据库中输入作业详细信息,该数据库是由Windows Service [C#]进行异步处理的,并制作一个http REST FALL拨打Java Web服务通知工作状态。
场景:
- 客户端对Java Web服务进行同步的恢复呼叫。
- Java Web服务将作业详细信息输入数据库(类似于进行异步调用),并等待Windows Service的回复(这是对Java Web服务的新http请求)。 >
- 基于收到的响应,Java Web服务需要回复在同步呼叫上等待的客户。
我们如何在Java Web服务中实现这一目标?
编辑:我已经使用泽西框架实现了RESTFULS服务,并在Jetty Server上运行。
取决于您使用的泽西岛和码头的版本,您可以使用Servlet 3.0中添加的异步处理请求的支持。(基于码头Wikipedia页面,我相信您至少需要基于本文的Jetty 8.x。我相信您至少需要泽西岛/JAX-RS 2.0。)
Jersey文档和JAX-RS API文档有示例如何异步(即在另一线程中)完成了未偿请求:
@Path("/resource")
public class AsyncResource {
@GET
public void asyncGet(@Suspended final AsyncResponse asyncResponse) {
new Thread(new Runnable() {
@Override
public void run() {
String result = veryExpensiveOperation();
asyncResponse.resume(result);
}
private String veryExpensiveOperation() {
// ... very expensive operation
}
}).start();
}
}
在您的情况下,您将以一种方式存储AsyncResponse
对象的方式,一旦您收到了其他Web服务的响应,就可以通过调用resume
的任何响应来完成请求。p>另请参见:
异步JAX-RS
的目的是什么jax-rs和长轮询