Java 任务队列有问题吗?
我正在使用谷歌应用程序引擎任务队列。这是我第一次。我找到了一个教程,但有一些问题。以下是我用来检查任务队列的两个servlet:Java 任务队列有问题吗?,java,eclipse,google-app-engine,task-queue,Java,Eclipse,Google App Engine,Task Queue,我正在使用谷歌应用程序引擎任务队列。这是我第一次。我找到了一个教程,但有一些问题。以下是我用来检查任务队列的两个servlet: public class GAEJSignupSubscriberServlet extends HttpServlet { private static final Logger _logger = Logger.getLogger(GAEJSignupSubscriberServlet.class.getName()); public void do
public class GAEJSignupSubscriberServlet extends HttpServlet {
private static final Logger _logger = Logger.getLogger(GAEJSignupSubscriberServlet.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world");
String strCallResult = "";
resp.setContentType("text/plain");
try {
String strEmailId = req.getParameter("emailid");
_logger.info("Got a Signup Subscriber Request for Email ID : " + strEmailId);
//
// PUT YOUR TASK CODE HERE
//
if(strEmailId.equals("mh")){
System.out.println("email-id" + strEmailId);
}
strCallResult = "SUCCESS: Subscriber Signup";
_logger.info(strCallResult);
resp.getWriter().println(strCallResult);
}
catch (Exception ex) {
strCallResult = "FAIL: Subscriber Signup : " + ex.getMessage();
_logger.info(strCallResult);
resp.getWriter().println(strCallResult);
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
第二个servlet是:
public class GAEJCreateTaskServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
this.doPost(req, resp);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world");
String strCallResult = "";
resp.setContentType("text/plain");
try {
//Extract out the To, Subject and Body of the Email to be sent
String strEmailId = req.getParameter("emailid");
//Do validations here. Only basic ones i.e. cannot be null/empty
if (strEmailId == null) throw new Exception("Email Id field cannot be empty.");
//Trim the stuff
strEmailId = strEmailId.trim();
if (strEmailId.length() == 0) throw new Exception("Email Id field cannot be empty.");
//Queue queue = QueueFactory.getDefaultQueue();
Queue queue = QueueFactory.getQueue("subscription-queue");
queue.add(TaskOptions.Builder.withUrl("/gaejsignupsubscriber").param("emailid",strEmailId));
strCallResult = "Successfully created a Task in the Queue";
resp.getWriter().println(strCallResult);
}
catch (Exception ex) {
strCallResult = "Fail: " + ex.getMessage();
resp.getWriter().println(strCallResult);
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
我正在使用以下URL调用GAEJBreateTaskServlet:
http://localhost:8080/gaejcreatetask?emailid=romin@rocketmail.com
现在的问题是,当我调用这个url时,我看到了创建任务的输出,但在开发控制台中,我看不到队列中的任何任务。如果我从两个servlet中删除doPost函数,那么我会在队列中看到该任务,但当我运行它时,什么都不会发生,任务仍然存在。为什么会发生这种情况,我如何解决这个问题。提前感谢。您很可能无法看到该任务,因为它已执行。在开发中的控制台或生产中的管理控制台上的日志页面上检查日志,查看任务处理程序引发的异常(如果有)并修复它。不确定是否应该使用此doGet方法。您有2个具有相同签名,但如果您说它打印成功消息,则这不应解决您的问题
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
this.doPost(req, resp);
}
GAEJSignupSubscriberServlet不需要设置响应内容类型,也不需要写入响应。当从任务调用servlet时,将永远看不到响应,想象一下它被发送到/dev/null。您应该从servlet登录
GAEJSignupSubscriberServlet不需要任何doGet方法,只需要doPost,因为默认情况下任务是使用方法POST创建的。如果希望使用GET,请使用methodTaskOptions.Method.GET配置TaskOptions