タスクキュー調査用ソース

【注】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>