Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动任务期间的AppEngine超时_Java_Google App Engine_Asynchronous - Fatal编程技术网

Java 启动任务期间的AppEngine超时

Java 启动任务期间的AppEngine超时,java,google-app-engine,asynchronous,Java,Google App Engine,Asynchronous,这种情况过去会持续几个月:(过去发生的情况) 1.API调用,限制为60秒 2.我通过任务异步运行一些端点API调用,因此返回“wait”消息,指示调用方稍后重试 3.任务已启动 4.API调用返回“等待” 5.任务将继续运行 现在发生了什么: 1.任务已启动 2.API不会返回 3.任务将继续运行 4.API调用超时 以下是我使用的代码: 1) “常规”API调用(60秒时间限制) 2) 异步火灾 @Override public void AsynchronousFire(Operatio

这种情况过去会持续几个月:(过去发生的情况)
1.API调用,限制为60秒
2.我通过任务异步运行一些端点API调用,因此返回“wait”消息,指示调用方稍后重试
3.任务已启动
4.API调用返回“等待”
5.任务将继续运行

现在发生了什么:
1.任务已启动
2.API不会返回
3.任务将继续运行
4.API调用超时

以下是我使用的代码:
1) “常规”API调用(60秒时间限制)

2) 异步火灾

 @Override public void AsynchronousFire(Operation operation, Parameters parameter) {
    Queue queue = QueueFactory.getQueue("asynchronous-command");
    byte[] bytes = ObjectSerializer.Serialize(parameter);
    String bytesMD5 = ObjectSerializer.getMD5(bytes);
    String userMD5 = ObjectSerializer.getMD5(parameter.getEmail().getBytes());
    String taskName = userMD5 + bytesMD5;
    if (this.executingTasksNames.containsKey(taskName)) {
      logger.warning("Task already exists --- Operation:" + operation + " taskName: " + taskName);
    } else {
      String encodedBytes = Base64.encodeBase64String(bytes);
      TaskOptions taskOptions = TaskOptions.Builder.withUrl("/asynchronous_dispatch_command").
          param("taskName", taskName).
          param("operation", operation.toString()).
          param("parameters", encodedBytes);
      taskOptions.countdownMillis(0);
      TaskHandle taskHandle = queue.add(taskOptions);
      this.executingTasksNames.put(taskName, taskHandle.getName());
    }
  }
3) HTTP Servlet:异步\u调度\u命令

public class AsynchronousDispatchCommand extends HttpServlet {

  @Override public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String operationName = request.getParameter("operation");
    String parametersEncoded = request.getParameter("parameters");
    byte[] parametersBytes = Base64.decodeBase64(parametersEncoded);
    Operation operation = Operation.fromString(operationName);
    Parameters parameters = (Parameters) ObjectSerializer.Deserialize(parametersBytes);
    controller.AsynchronousDispatch(request, operation, parameters, response);
  }
}
a。此代码正确吗?
B这过去工作可靠。过去两个月发生了什么事打破了它?
C有没有办法使这个机制可靠地工作


谢谢

尝试删除
倒计时毫秒(0)行并使用
queue.addAsync(taskOptions)查看是否得到不同的结果。这行代码实际上是前一段时间添加的,因为任务是不可预测地触发的。当时,在我添加了该行之后,我可能没有注意到。谢谢你的建议。我会尽快试一试的。我将公布结果。
public class AsynchronousDispatchCommand extends HttpServlet {

  @Override public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String operationName = request.getParameter("operation");
    String parametersEncoded = request.getParameter("parameters");
    byte[] parametersBytes = Base64.decodeBase64(parametersEncoded);
    Operation operation = Operation.fromString(operationName);
    Parameters parameters = (Parameters) ObjectSerializer.Deserialize(parametersBytes);
    controller.AsynchronousDispatch(request, operation, parameters, response);
  }
}