在appengine中添加和租赁任务时出现InvalidQueueModeException

时间:2014-10-30 06:37:31

标签: java google-app-engine task-queue

我有以下队列定义

<queue>
    <name>ranker-queue</name>
    <mode>pull</mode>
</queue>

循环10次

    Queue q = QueueFactory.getQueue("ranker-queue");
    TaskOptions taskOptions = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL);
    q.add(taskOptions);

循环10次

    Queue q = QueueFactory.getQueue("ranker-queue");
    List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, 5);
    //Processing 
    q.deleteTask( tasks );

在循环几次之后的两种情况下都会出现以下异常

com.google.appengine.api.taskqueue.InvalidQueueModeException: Target queue mode does not support this operation : null
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:552)
    at com.google.appengine.api.taskqueue.QueueImpl$2.wrap(QueueImpl.java:521)
    at com.google.appengine.api.utils.FutureWrapper.wrapAndCache(FutureWrapper.java:55)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:92)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.taskqueue.QueueApiHelper.getInternal(QueueApiHelper.java:72)
    at com.google.appengine.api.taskqueue.QueueImpl.add(QueueImpl.java:413)

Caused by: com.google.appengine.api.taskqueue.InvalidQueueModeException: Target queue mode does not support this operation : 
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:139)
    at com.google.appengine.api.taskqueue.QueueApiHelper.translateError(QueueApiHelper.java:153)
    at com.google.appengine.api.taskqueue.QueueApiHelper$1.convertException(QueueApiHelper.java:52)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:96)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.taskqueue.QueueApiHelper.getInternal(QueueApiHelper.java:72)
    at com.google.appengine.api.taskqueue.QueueImpl.leaseTasks(QueueImpl.java:810)

2 个答案:

答案 0 :(得分:0)

你得到这个错误的原因并且神奇地消失了...就在你收到这个错误之前你必须最近改变了#34; ranker-queue&#34;从推送队列到拉取队列。在您上传新的queue.xml之后,App Engine似乎需要时间来传播更改。不幸的是,我不知道这个过程需要多长时间。

答案 1 :(得分:-1)

在此代码中:

Queue q = QueueFactory.getQueue("ranker-queue");
TaskOptions taskOptions = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL);
q.add(taskOptions);

...您正在定义任务选项,但您没有添加任务有效负载。以下是the docs的示例:

Queue q = QueueFactory.getQueue("pull-queue");
q.add(TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
                                 .payload("hello world"));