diff --git a/appengine-java8/tasks/README.md b/appengine-java8/tasks/README.md index 00aee8be961..8fc7231896c 100644 --- a/appengine-java8/tasks/README.md +++ b/appengine-java8/tasks/README.md @@ -69,12 +69,15 @@ location is "us-central1"). export LOCATION_ID= ``` +### Using App Engine Queues Create a task, targeted at the `/tasks/create` endpoint, with a payload specified: ``` mvn exec:java -Dexec.mainClass="com.example.task.CreateTask" \ -Dexec.args="--project-id $GOOGLE_CLOUD_PROJECT \ - --queue $QUEUE_ID --location $LOCATION_ID --payload hello" + --queue $QUEUE_ID \ + --location $LOCATION_ID \ + --payload hello" ``` The App Engine app serves as a target for the push requests. It has an diff --git a/appengine-java8/tasks/pom.xml b/appengine-java8/tasks/pom.xml index 2f5ba869b8a..ba427ae32bb 100644 --- a/appengine-java8/tasks/pom.xml +++ b/appengine-java8/tasks/pom.xml @@ -52,7 +52,7 @@ Copyright 2018 Google LLC com.google.cloud google-cloud-tasks - 0.86.0-beta + 0.88.0-beta commons-cli diff --git a/appengine-java8/tasks/src/main/java/com/example/task/CreateTask.java b/appengine-java8/tasks/src/main/java/com/example/task/CreateTask.java index a2d83575523..2609cbcd8fc 100644 --- a/appengine-java8/tasks/src/main/java/com/example/task/CreateTask.java +++ b/appengine-java8/tasks/src/main/java/com/example/task/CreateTask.java @@ -161,8 +161,8 @@ private static void printUsage(Options options) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp( "client", - "A simple Cloud Tasks command line client that triggers a call to an AppEngine " - + "endpoint.", + "A simple Cloud Tasks command line client that creates a task with an " + + "App Engine endpoint.", options, "", true); throw new RuntimeException(); } diff --git a/appengine-java8/tasks/src/main/java/com/example/task/TaskServlet.java b/appengine-java8/tasks/src/main/java/com/example/task/TaskServlet.java index 141f9264047..adbef6c37c7 100644 --- a/appengine-java8/tasks/src/main/java/com/example/task/TaskServlet.java +++ b/appengine-java8/tasks/src/main/java/com/example/task/TaskServlet.java @@ -38,7 +38,7 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx 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); diff --git a/tasks/README.md b/tasks/README.md new file mode 100644 index 00000000000..760a0ba6605 --- /dev/null +++ b/tasks/README.md @@ -0,0 +1,85 @@ +# Google Cloud Tasks App Engine Queue Samples + +Sample command-line program for interacting with the Cloud Tasks API +using App Engine queues. + +App Engine queues push tasks to an App Engine HTTP target. This directory +contains both the App Engine app to deploy, as well as the snippets to run +locally to push tasks to it, which could also be called on App Engine. + +`CreateTask.java` is a simple command-line program to create +tasks to be pushed to the App Engine app. + +`TaskServlet.java` is the main App Engine app. This app serves as an endpoint to receive +App Engine task attempts. + + +## Initial Setup + + * Set up a Google Cloud Project and enable billing. + * Enable the + [Cloud Tasks API](https://console.cloud.google.com/launcher/details/google/cloudtasks.googleapis.com). + * Download and install the [Cloud SDK](https://cloud.google.com/sdk). + * Download and install [Maven](http://maven.apache.org/install.html). + * Set up [Google Application Credentials](https://cloud.google.com/docs/authentication/getting-started). + +## Creating a queue + +To create a queue using the Cloud SDK, use the following gcloud command: + +``` +gcloud beta tasks queues create-app-engine-queue my-appengine-queue +``` + +Note: A newly created queue will route to the default App Engine service and +version unless configured to do otherwise. + +## Deploying the App Engine app +[Using Maven and the App Engine Plugin](https://cloud.google.com/appengine/docs/flexible/java/using-maven) +& [Maven Plugin Goals and Parameters](https://cloud.google.com/appengine/docs/flexible/java/maven-reference) + +``` +mvn appengine:deploy +``` + +## Run the Sample Using the Command Line + +Set environment variables: + +First, your project ID: + +``` +export GOOGLE_CLOUD_PROJECT= +``` + +Then the queue ID, as specified at queue creation time. Queue IDs already +created can be listed with `gcloud beta tasks queues list`. + +``` +export QUEUE_ID=my-appengine-queue +``` + +And finally the location ID, which can be discovered with +`gcloud beta tasks queues describe $QUEUE_ID`, with the location embedded in +the "name" value (for instance, if the name is +"projects/my-project/locations/us-central1/queues/my-appengine-queue", then the +location is "us-central1"). + +``` +export LOCATION_ID= +``` + +### Using HTTP Push Queues + +Set an environment variable for the endpoint to your task handler. This is an +example url to send requests to the App Engine task handler: +``` +export URL=https://${PROJECT_ID}.appspot.com/tasks/create +``` + +Running the sample will create a task and send the task to the specific URL +endpoint, with a payload specified: + +``` +mvn exec:java -Dexec.mainClass="com.example.task.CreateHttpTask" +``` diff --git a/tasks/pom.xml b/tasks/pom.xml new file mode 100644 index 00000000000..5151ee378c0 --- /dev/null +++ b/tasks/pom.xml @@ -0,0 +1,64 @@ + + + + 4.0.0 + war + 1.0-SNAPSHOT + com.example.task + tasks-samples + + + + com.google.cloud.samples + shared-configuration + 1.0.11 + + + + + 1.8 + 1.8 + false + + + + + + com.google.cloud + google-cloud-tasks + 0.88.0-beta + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.4.0 + + com.example.task.CreateHttpTask + false + + + + + diff --git a/tasks/src/main/java/com/example/task/CreateHttpTask.java b/tasks/src/main/java/com/example/task/CreateHttpTask.java new file mode 100644 index 00000000000..9b4a1ac23d6 --- /dev/null +++ b/tasks/src/main/java/com/example/task/CreateHttpTask.java @@ -0,0 +1,64 @@ +/* + * Copyright 2018 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.task; + +// [START cloud_tasks_create_http_task] +import com.google.cloud.tasks.v2beta3.CloudTasksClient; +import com.google.cloud.tasks.v2beta3.HttpMethod; +import com.google.cloud.tasks.v2beta3.HttpRequest; +import com.google.cloud.tasks.v2beta3.QueueName; +import com.google.cloud.tasks.v2beta3.Task; +import com.google.protobuf.ByteString; +import java.nio.charset.Charset; + +public class CreateHttpTask { + + public static void main(String[] args) throws Exception { + String projectId = System.getenv("PROJECT_ID"); + String queueName = System.getenv("QUEUE_ID"); + String location = System.getenv("LOCATION_ID"); + String url = System.getenv("URL"); + + // Instantiates a client. + try (CloudTasksClient client = CloudTasksClient.create()) { + // Variables provided by the system variables. + // projectId = "my-project-id"; + // queueName = "my-appengine-queue"; + // location = "us-central1"; + // url = "https://.appspot.com/tasks/create"; + String payload = "hello"; + + // Construct the fully qualified queue name. + String queuePath = QueueName.of(projectId, location, queueName).toString(); + + // Construct the task body. + Task.Builder taskBuilder = + Task.newBuilder() + .setHttpRequest( + HttpRequest.newBuilder() + .setBody(ByteString.copyFrom(payload, Charset.defaultCharset())) + .setUrl(url) + .setHttpMethod(HttpMethod.POST) + .build()); + + // Send create task request. + Task task = client.createTask(queuePath, taskBuilder.build()); + System.out.println("Task created: " + task.getName()); + } + } +} +// [END cloud_tasks_create_http_task]