タスクキュー調査用ソース
【注】1/27 18:30頃にソースを更新しました。
(サーブレットのインスタンスIDを取得するように変更)メモ
・タスク数と処理時間を数パターン用意してテストする。・jmeterで複数同時にリクエストしてテストする。
以下のようにGETパラメータでタスク数と処理時間を指定(appidの部分は適宜変更)
ttp://appid.appspot.com/tqtest/Test00Servlet?num=4&wait=1000
Test00Servlet.java
package tqtest; import java.util.UUID; import java.util.logging.Logger; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.*; import com.google.appengine.api.labs.taskqueue.Queue; import com.google.appengine.api.labs.taskqueue.QueueFactory; import com.google.appengine.api.labs.taskqueue.TaskOptions; @SuppressWarnings("serial") public class Test00Servlet extends HttpServlet { private static final Logger logger = Logger.getLogger(Test00Servlet.class.getName()); private static String servletId = UUID.randomUUID().toString(); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { long start = System.currentTimeMillis(); String uuid = UUID.randomUUID().toString(); try { resp.setContentType("text/plain"); int num = Integer.parseInt(req.getParameter("num")); String wait = req.getParameter("wait"); String url = "/tqtest/Queue00Servlet?wait=" + wait + "&rid=" + uuid; logger.info(String.format("%s,%s,Test00Servlet Start:%d", servletId, uuid, start)); Queue q = QueueFactory.getDefaultQueue(); for (int i=0; i<num; i++) { q.add(TaskOptions.Builder.url(url).method(TaskOptions.Method.GET)); } PrintWriter out = resp.getWriter(); out.println(String.format("queued num:%d wait:%sms", num, wait)); out.close(); } catch (Exception e) { logger.info(String.format("%s,%s,Test00Servlet Exception :%s", servletId, uuid, e.toString())); throw new ServletException(e); } finally { logger.info(String.format("%s,%s,Test00Servlet End:%dms", servletId, uuid, (System.currentTimeMillis() - start))); } } }
Queue00Servlet.java
package tqtest; import java.util.UUID; import java.util.logging.Logger; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.*; @SuppressWarnings("serial") public class Queue00Servlet extends HttpServlet { private static final Logger logger = Logger.getLogger(Queue00Servlet.class.getName()); private static String servletId = UUID.randomUUID().toString(); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { long start = System.currentTimeMillis(); String wait = req.getParameter("wait"); String rid = req.getParameter("rid"); String uuid = UUID.randomUUID().toString(); try { logger.info(String.format("%s,%s,%s,Start :%d", servletId, rid, uuid, start)); Thread.sleep(Integer.parseInt(wait)); } catch (Exception e) { logger.info(String.format("%s,%s,%s,Exception :%dms :%s", servletId, rid, uuid, (System.currentTimeMillis() - start), e.toString())); throw new ServletException(e); } finally { logger.info(String.format("%s,%s,%s,End :%dms", servletId, rid, uuid, (System.currentTimeMillis() - start))); } } }
web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>Test00Servlet</servlet-name> <servlet-class>tqtest.Test00Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Test00Servlet</servlet-name> <url-pattern>/tqtest/Test00Servlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>Queue00Servlet</servlet-name> <servlet-class>tqtest.Queue00Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Queue00Servlet</servlet-name> <url-pattern>/tqtest/Queue00Servlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>