gpt4 book ai didi

java - Spring 3.0中如何处理比平时花费更多时间的搜索任务

转载 作者:行者123 更新时间:2023-12-01 15:55:19 27 4
gpt4 key购买 nike

我正在寻找有关如何处理与搜索相关的任务的想法,该任务需要比平常更多的时间(以人类的术语来说超过 3 秒)

我必须查询多个来源,第一次筛选信息,然后将其缓存在数据库中以便以后快速返回。

该项目的背景是 J2EE、Spring 和 Hibernate(在 SpringROO 之上)

我能想到的可能的解决方案-在网页上让用户知道任务正在后台运行,如果可能的话给他们一个队列号或等待时间。通过 Controller 刷新页面,该 Controller 基本上检查任务是否完成,然后当任务完成时(即搜索结果准备好并存储在数据库中),然后转发到新 Controller 并从数据库获取结果

-后台任务可以使用 Spring Task 执行器来完成。我不确定是否容易衡量需要多长时间。让所有搜索词同时运行可能是一个坏主意,因此某种池化将是一个好主意。

-使用后台任务的另一个选项是使用 JMS。这可能是一个具有更多控制权的解决方案(重试等)

-Spring 批处理也浮现在脑海

请建议您将如何做。我非常感谢半详细的描述。信息来源可以是人为的,并且本质上可以是连续的,因此可能需要长达 4-5 分钟的时间才能形成结果。此类任务也可能在后台自动运行,无需用户干预(即从源更新)

最佳答案

从用户的角度来看,我使用AJAX。默认网页包含某种“忙碌”指示器。当 AJAX 请求完成时,忙碌指示器将被结果替换。

在后台,请求处理程序已经是多线程的。因此,您可以简单地格式化默认结果,关闭并刷新输出,并在当前线程中进行处理。您应该在 session 或数据库中放置一些内容,以确保没有人可以再次启动相同的繁重进程。

可以在 Web 容器中运行任务池,但有一些注意事项,特别是如何同步启动/关闭:您是否希望 Web 服务器在关闭期间“挂起”,而某些线程正忙于收集结果?还应考虑额外负载。最好使用 JMS 并将压力转移到专用于构建搜索结果的第二台服务器。

如果您的搜索开始成为负担,这样的系统将具有更好的扩展性。它还使得通过编写一个在 JMS 队列中发布搜索的小程序来自动化该过程变得很简单。

关于java - Spring 3.0中如何处理比平时花费更多时间的搜索任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5192997/

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