【发布时间】:2019-01-03 23:05:29
【问题描述】:
我是 Google Cloud Tasks 的新手。
我指的是https://cloud.google.com/tasks/docs/quickstart-appengine。
我已成功设置 Java 示例应用,创建了 App Engine 队列并将任务添加到 App Engine 队列。
但是,据我了解,该示例应用程序实际上什么也没做。如果我想让应用做一些有用的事情,我应该把我的代码放在哪里?
【问题讨论】:
我是 Google Cloud Tasks 的新手。
我指的是https://cloud.google.com/tasks/docs/quickstart-appengine。
我已成功设置 Java 示例应用,创建了 App Engine 队列并将任务添加到 App Engine 队列。
但是,据我了解,该示例应用程序实际上什么也没做。如果我想让应用做一些有用的事情,我应该把我的代码放在哪里?
【问题讨论】:
按照 Java 示例应用程序,您的代码应放在 TaskServlet.java 中。
您发送的有效负载将由处理程序获取,您要执行的代码将在其中。您可以在那里使用该有效负载来执行您的代码。
我的代码如下所示:
@WebServlet(
name = "Tasks",
description = "Create Cloud Task",
urlPatterns = "/tasks/create" //Relative path to this handler
)
public class TaskServlet extends HttpServlet {
private static Logger log = Logger.getLogger(TaskServlet.class.getName());
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws
IOException {
log.info("Received task request: " + req.getServletPath());
String body = req.getReader()
.lines()
.reduce("", (accumulator, actual) -> accumulator + actual);
if (!body.isEmpty()) {
log.info("Request payload: " + body);
String output = String.format("Received task with payload %s", body);
resp.getOutputStream().write(output.getBytes());
log.info("Sending response: " + output);
//For instance, something like...
myFunction(body); //body being the payload
resp.setStatus(HttpServletResponse.SC_OK);
} else {
log.warning("Null payload received in request to " + req.getServletPath());
}
}
private void myFunction(String str){
//Your code here
}
}
在CreateTask.java 内观察处理程序的相对路径是如何设置的:
// Construct the task body.
Task.Builder taskBuilder = Task
.newBuilder()
.setAppEngineHttpRequest(AppEngineHttpRequest.newBuilder()
.setBody(ByteString.copyFrom(payload, Charset.defaultCharset()))
.setRelativeUri("/tasks/create") //This will look for a handler with this relative path
.setHttpMethod(HttpMethod.POST)
.build());
您还可以创建不同的处理程序,为它们提供不同的相对 URI。
【讨论】: