我有以下队列定义
<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)
答案 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"));