【发布时间】:2015-05-25 00:27:40
【问题描述】:
这是我遇到的问题,与设计和实现有关:
我有一个接受 POST 请求的 REST Web 服务。没什么特别的。它目前是同步响应的。
但是,此 Web 服务将启动一个可能需要很长时间的后台进程。
我不希望此服务在 30 分钟后响应。
相反,它应该立即向客户端返回一个 ack 响应,仅此而已(即使在 30 分钟后,也不会再发送任何信息)。
如何使用 Jersey 实现这种行为?
我阅读了https://jersey.java.net/nonav/documentation/2.0/async.html#d0e6914的页面。
虽然读起来很有趣,但我没有找到只发送 ACK 类型的响应(类似于 HTTP 200 代码)的方法。
也许我对异步和我想要实现的行为感到困惑。
我刚刚明白我可以在我的@POST 方法中创建一个新线程来处理后台进程,然后立即返回 ACK 响应。
但是在响应被发送回客户端后,这个新线程是否存在?
你会如何实现这个WS?
我希望你能帮助我澄清这一点。
【问题讨论】:
-
为什么你的线程不能存活?我只想生成一个新线程,因为该线程的结果与客户端无关。
-
@condit :我尝试了这种方法:效果很好。我们将在第一次迭代中坚持它,但我确信每次调用 WS 时创建一个新线程可能会导致一些问题,对吧?
-
你不应该直接创建线程。您需要使用
Executor来创建线程池。您可以从一个固定大小的线程池开始,然后根据您的应用程序对其进行调整。 -
非常感谢您的回复。
标签: asynchronous jersey