Performance Grails—控制器中耗时的处理

Performance Grails—控制器中耗时的处理,performance,grails,grails-controller,Performance,Grails,Grails Controller,我目前有一个控制器,可以进行一些繁重的处理(批量csv文件处理-cvs文件范围从150Mb到400Mb)。CSV文件将上载到临时文件位置。处理由一个服务完成,该服务将文件位置从外部jar传递到一个API(基本java API调用-没有web服务调用或任何东西)。服务方法返回大约需要2-3次,用户当前必须等待这段时间,以便在提交表单后完成处理并加载页面-这不是最佳的用户体验 Grails用户遇到过这样的问题,解决这类问题的最佳方案是什么?我不熟悉Grails和JavaEE,因此这基本上是一个关于如

我目前有一个控制器,可以进行一些繁重的处理(批量csv文件处理-cvs文件范围从150Mb到400Mb)。CSV文件将上载到临时文件位置。处理由一个服务完成,该服务将文件位置从外部jar传递到一个API(基本java API调用-没有web服务调用或任何东西)。服务方法返回大约需要2-3次,用户当前必须等待这段时间,以便在提交表单后完成处理并加载页面-这不是最佳的用户体验

Grails用户遇到过这样的问题,解决这类问题的最佳方案是什么?我不熟悉Grails和JavaEE,因此这基本上是一个关于如何构建这样一个系统以及可用于此系统的库的问题

我在谷歌上搜索了很多。人们用JMS、RabbitMQ等作为类似问题的解决方案。但这些似乎是在用火箭筒来交换苍蝇,这是我头脑中的一种解决办法。非常感谢你的建议


谢谢。

使用
quartz
插件。。。让控制器安排一个即时作业(调度很快,用户将立即得到响应,处理将在另一个线程中运行的quartz作业中进行)。只要在所有工作完成后通知用户(发送电子邮件或其他)


或者,使用
executor
plugin在新线程中启动作业。2.3将有可能在这里有所帮助。

使用
quartz
插件。。。让控制器安排一个即时作业(调度很快,用户将立即得到响应,处理将在另一个线程中运行的quartz作业中进行)。只要在所有工作完成后通知用户(发送电子邮件或其他)


或者,使用
executor
plugin在新线程中启动作业。2.3将有可能在这里有所帮助。

如果希望在不同的线程中执行服务方法,可以在该方法上使用Spring@Async注释。这是我在Grails应用程序中采用的方法,非常简单

这里有一个如何设置的示例:

如果希望在不同的线程中执行服务方法,可以在该方法上使用Spring@Async注释。这是我在Grails应用程序中采用的方法,非常简单

这里有一个如何设置的示例:

重载处理
不是特定于Grails的,它取决于您在做什么以及如何做。我相信发布代码有助于识别潜在的瓶颈。这取决于你在做什么样的“繁重处理”。详细说明在控制器类和服务类中具体执行的处理。还添加了处理的详细信息。我已经用这些信息编辑了原始问题。为什么不开始一个新线程呢?
繁重的处理
不是Grails特有的,它取决于您正在做什么以及如何做。我相信发布代码有助于识别潜在的瓶颈。这取决于你在做什么样的“繁重处理”。详细说明在控制器类和服务类中具体执行的处理。还添加了处理的详细信息。我已经用这些信息编辑了原始问题。为什么不开始一个新的线程呢?