Java によるタスクキューの例

次のコードは、オプションを指定してタスクをキューに追加します。

index.html:

<!-- A basic index.html file served from the "/" URL. -->
    <html>
    <body>
    <p>Enqueue a value, to be processed by a worker.</p>
    <form action="/enqueue" method="post">
        <input type="text" name="key">
        <input type="submit">
    </form>
    </body>
    </html>

Enqueue.java:

// The Enqueue servlet should be mapped to the "/enqueue" URL.
    // With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
    @WebServlet(
        name = "TaskEnque",
        description = "taskqueue: Enqueue a job with a key",
        urlPatterns = "/taskqueues/enqueue"
    )
    public class Enqueue extends HttpServlet {

      protected void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        String key = request.getParameter("key");

        // Add the task to the default queue.
        Queue queue = QueueFactory.getDefaultQueue();
        queue.add(TaskOptions.Builder.withUrl("/worker").param("key", key));

        response.sendRedirect("/");
      }
    }

Worker.java:

// The Worker servlet should be mapped to the "/worker" URL.
    // With @WebServlet annotation the webapp/WEB-INF/web.xml is no longer required.
    @WebServlet(
        name = "TaskWorker",
        description = "TaskQueues: worker",
        urlPatterns = "/taskqueues/worker"
    )
    public class Worker extends HttpServlet {

      private static final Logger log = Logger.getLogger(Worker.class.getName());

      protected void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        String key = request.getParameter("key");

        // Do something with key.
        // ...
      }
    }

このキューに追加されたタスクは、パラメータ key を指定して URL /worker でリクエスト ハンドラを呼び出すことで実行されます。これらのタスクは、queue.xml ファイルに設定された速度、またはデフォルトの速度(5 タスク/秒)で実行されます。