gpt4 book ai didi

servlets - 如何在 JavaEE 响应后执行代码

转载 作者:行者123 更新时间:2023-12-04 03:20:37 25 4
gpt4 key购买 nike

我尝试找到一种在响应后运行代码的方法,但没有成功。

在我的例子中,服务器向我发送数据以便让我完成我的工作,但此操作可能很长(例如,向 5000 个联系人发送 SMS 并检查谁收到了它)。服务器期望立即收到 HTTP 204 No Content 响应以确保已收到数据。然后我的网络应用程序将执行操作并在 REST API 上发送状态。

我的问题是:如何发送响应然后执行代码?

现在我尝试了:

  • 做过滤器
  • 异步上下文
  • 执行器服务

在每种情况下,为了测试连接是否在我的操作结束之前关闭,我调用了一个外部 URL,该 URL 故意花 10 秒来回答。每次,我的服务器都需要 10 秒来响应。

我的 servlet 只是挂起,等待代码结束。

我无法使代码与 Executors 一起工作(这是新手),但即使我在线程执行期间遇到错误,我也想发送 HTTP 204 并在另一只手上处理错误。

有没有简单的方法来做到这一点?

最佳答案

我使用后台线程轮询队列表,以查找在发送响应之前不必完成的事情,这些事情将花费超过 0.1 秒的时间。例如,电子邮件发件人线程处理发送电子邮件以响应用户的操作,例如“感谢您的订单”消息。在这种情况下,servlet 生成电子邮件并将其作为记录附加到状态为“准备发送”的电子邮件表中,然后让电子邮件发件人线程知道有一封新电子邮件已准备好发送。电子邮件发件人线程获取下一个最旧的“准备发送”消息,发送它,更新表格并等待下一个。最酷的部分是从主程序发送电子邮件就像将记录附加到表中一样简单,然后继续前进,而无需每次都使用 SMTP 服务。我有一个单独但非常相似的线程来发送短信。如果后台进程无法处理负载并开始落后,则启动多个进程非常容易,只要您小心确保它们不会尝试获取队列中的相同记录。

关于servlets - 如何在 JavaEE 响应后执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com