1

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

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

我正在 AppEngine 基础设施上对此进行测试,只有 1 个处理程序正在尝试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: []

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

4

1 回答 1

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 任务队列配置没有提到这个参数仅适用于推送队列

希望这可以帮助某人:)

于 2014-11-07T02:14:54.710 回答