jer*_*edt 4 asynchronous jersey
这是我遇到的问题,它与设计和实现有关:
我有一个接受POST请求的REST Web服务.没什么特别的.它目前同步响应.
但是,此Web服务将启动可能需要很长时间的后台进程.
我不希望这项服务在30分钟后回复.
相反,它应该立即向客户端返回一个ack响应,而不是更多(即使在30分钟后,也没有更多的信息要发送).
如何使用Jersey实现此类行为?
我阅读了https://jersey.java.net/nonav/documentation/2.0/async.html#d0e6914页面.
虽然这是一个有趣的阅读,但我没有找到只发送ACK类型响应(类似于HTTP 200代码)的方法.
也许我对异步和我想要实现的行为感到困惑.
我只知道我可以在@POST方法中创建一个新的Thread来处理后台进程,并立即返回ACK响应.
但是,在将响应发送回客户端后,这个新线程是否存在?
你会如何实现这个WS?
我希望你能帮助我澄清这一点.
我认为您链接的Jersey 2异步服务器API仍将保持客户端连接,直到处理完成.异步处理实际上是Jersey的内部处理,不会影响客户端体验.
如果要返回ACK,可以使用常规Jersey方法,将工作委托给另一个线程,然后立即返回.我推荐这个用例的HTTP 202.
您可以创建一个Thread来执行此操作,就像在Jersey 2示例中一样,它可以在执行Jersey资源方法调用时继续存在:
@POST
public Response asyncPost(String data) {
new Thread(...).start();
return Response.status(Response.Status.ACCEPTED).build();
}
Run Code Online (Sandbox Code Playgroud)
这就是说,在app服务器中通常不建议创建线程.
如果您使用的是EE7,我建议您查看JSR-236 http://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/package-summary.html
如果您正在使用EE6,则可以考虑将消息发送到队列,以便在后台由消息驱动Bean(MDB)处理.
归档时间: |
|
查看次数: |
3731 次 |
最近记录: |