异步作业出错

agu*_*luc 10 grails groovy

我正在尝试创建一个不会阻止请求的异步任务.用户发出请求,任务将启动,控制器将呈现"作业正在运行...",这是为了避免请求被阻止等待任务完成.任务完成后,它将执行onComplete并对该任务的结果执行某些操作(例如,调用将向用户发送邮件的服务)

| Error 2014-09-16 17:38:56,721 [Actor Thread 3] ERROR gpars.LoggingPoolFactory  - Async execution error: null
Run Code Online (Sandbox Code Playgroud)

代码如下:

package testasync

import static grails.async.Promises.*

class TestController {

  def index() {
    //Create the job
    def job1 = task {
        println 'Waiting 10 seconds'
        Thread.sleep(10000)
        return 'Im done'
    }
    //On error
    job1.onError { Throwable err ->
        println "An error occured ${err.message}"
    }
    //On success
    job1.onComplete { result ->
        println "Promise returned $result"
    }
    render 'Job is running...'
  }
Run Code Online (Sandbox Code Playgroud)

完成堆栈跟踪:

| Error 2014-09-17 10:35:24,522 [Actor Thread 3] ERROR gpars.LoggingPoolFactory  -  Async execution error: null
Message: null
   Line | Method
 ->>   72 | doCall    in org.grails.async.factory.gpars.GparsPromise$_onError_closure2
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  |     62 | run       in groovyx.gpars.dataflow.DataCallback$1
  |   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
  |    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
  ^    745 | run . . . in java.lang.Thread
Run Code Online (Sandbox Code Playgroud)

agu*_*luc 3

我结束了使用带有 grails-executor 插件的执行器框架。我在这里上传了一个非常基本的示例:https ://github.com/agusl88/grails-async-job-queuqe

该代码使用 grails-executor 插件的“自定义”版本,我从插件存储库中合并了一些 PR,并将其打包为 jar 只是为了测试 propuses。该插件的存储库是这样的:https://github.com/basejump/grails-executor