Проблема с очередью задач? - PullRequest
0 голосов
/ 29 июля 2011

Я работаю с очередью задач Google App Engine. Это мой первый раз. Я нашел учебник, но возникли некоторые проблемы. Ниже приведены два сервлета, которые я использую для проверки очереди задач:

 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);
    }

 }

второй сервлет:

  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);
    }

 }

Я вызываю GAEJCreateTaskServlet с этим URL:

 http://localhost:8080/gaejcreatetask?emailid=romin@rocketmail.com

Теперь проблема в том, что когда я вызываю этот URL, я вижу вывод, что задача создана, но в консоли разработки я не вижу ни одной задачи в очереди. Если я удаляю функцию doPost из обоих сервлетов, я вижу задачу в очереди, но когда я ее запускаю, ничего не происходит и задачи остаются там. Почему так происходит и как я могу решить эту проблему. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 05 августа 2011

Не уверен, нужен ли вам этот метод doGet.У вас есть 2 с одинаковой подписью, но это не решит вашу проблему, если вы скажете, что она печатает сообщение об успехе.

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
    this.doPost(req, resp);
}
0 голосов
/ 25 июня 2012

GAEJSignupSubscriberServlet не нужно устанавливать тип содержимого ответа или писать в ответ.Поскольку сервлет вызывается из задачи, ответ никогда не виден, представьте, что он отправляется в / dev / null.Вы должны войти из сервлета.

GAEJSignupSubscriberServlet не требует каких-либо методов doGet, только doPost, поскольку задачи создаются с помощью метода POST по умолчанию.Если вы предпочитаете использовать GET, настройте TaskOptions с помощью метода (TaskOptions.Method.GET)

0 голосов
/ 01 августа 2011

Скорее всего, вы не видите задачу, потому что она уже выполнена.Проверьте свои журналы (консоль в разработке или страницу регистрации в консоли администратора в рабочей среде), чтобы увидеть, какое исключение выдается вашим обработчиком задач (если есть), и исправить это.

...