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);
}
}