Pull Queue leaseTasks没有返回任何TaskHandles

时间:2014-11-07 01:42:20

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

我正在尝试在Google AppEngine上使用Pull Queue,这是设置

  • 用户将通过我的应用程序REST API创建任务
    • 然后将任务添加到“TEST_QUEUE”(模式:PULL)
  • Cron作业将检查QueueStatistics以查看是否有任何待处理任务,并计算要启动的工作人员数量并将工作人员配置(租约,要获取的任务数等)推送到{{3 }}
  • 在Push Queue处理程序中,我正在进行一些健全性检查并发出leaseTasks Java API调用
    • 这是问题,这个调用总是返回TaskHandles的空数组。

我在AppEngine基础设施上测试这个,只有一个处理程序试图leaseTasks

这就是我添加任务的方式

Queue queue = QueueFactory.getQueue("TEST_QUEUE");
TaskOptions options = TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
                                 .payload("Test");

这就是我尝试获取任务的方式

Queue queue = QueueFactory.getQueue("TEST_QUEUE");
Logger.info("Task Count (Before): " + queue.fetchStatistics().getNumTasks());
List<TaskHandle> handles = queue.leaseTasks(300, TimeUnit.SECONDS, 100);
Logger.info("Task Count (After): " + queue.fetchStatistics().getNumTasks());
Logger.info("Handles: " + handles);

我在“TEST_QUEUE”中有3个任务(也是从管理控制台确认的)

Task Count (Before): 3
Task Count (After): 3
Handles: []

此后,当我在管理控制台中签入时,任务不再存在。我想知道是否有人在此之前看过这个或我做错了什么?请建议

1 个答案:

答案 0 :(得分:0)

好的......经过几次试错尝试后,我发现了问题

以下是我上面提到的队列的queue.xml摘要。

<queue>
    <name>TEST_QUEUE</name>
    <mode>pull</mode>
    <retry-parameters>
        <task-retry-limit>0</task-retry-limit>
    </retry-parameters>
</queue>

从上面的代码段移除<retry-parameters>后问题得以解决。我试图从推送队列转换此队列,所以我忽略了删除这个,因为Java Task Queue Configuration没有提到此参数仅适用于推送队列

希望这有助于某人:)