问题标签 [pull-queue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
407 浏览

google-app-engine - gae 拉队列中的lease_tasks() 是阻塞方法吗?

我在 Google App Engine 中有一个拉取队列和一个常驻后端,用于处理拉取队列中的任务。正如 Google Cloud Platform 博客中的一篇文章所建议的那样,后端有多个用于消费和处理任务的工作线程

https://cloud.google.com/resources/articles/ios-push-notifications

工作人员使用lease_tasks() 轮询拉取队列。我的问题是:lease_tasks() 是否应该是一种阻塞方法,即阻塞当前线程的执行,直到队列有一些任务或超过期限?

根据 GAE 文件

https://developers.google.com/appengine/docs/python/taskqueue/overview-pull#Python_Leasing_tasks

lease_tasks() 接受“deadline”参数并可能引发 DeadlineExceededError,因此假设lease_tasks() 阻塞到“deadline”秒是不合理的吗?

问题是当我在开发服务器中开发应用程序时,lease_tasks() 立即返回一个空的任务列表。结果是工作线程的while循环不断地调用lease_tasks(),从而消耗了100%的CPU。如果我放置一个显式的 sleep(),比如说 5 秒,这将使工作人员进入睡眠状态,并且如果同时将任务放入队列中,则不会唤醒。这会使工作人员的响应速度降低(最坏的情况下,处理下一个任务可能需要 -> 5 秒),而且我会消耗更多的 CPU(唤醒 - > 睡眠周期),而不是仅仅将线程块放在“队列”中(我知道拉队列实际上是一个 RPC,但它抽象地仍然是一个生产者队列)

也许这只发生在开发应用程序服务器上,而在 GAE 租约任务()块中。但是,上面提到的博客文章中的示例代码也使用 sleep() 暂停线程执行。示例代码在 github 中可用,链接在博客文章中(不幸的是我不能在这里发布)

0 投票
1 回答
144 浏览

google-app-engine - App Engine 拉取队列任务的生命周期是多少?

如果将任务添加到拉队列中,它将在拉队列中保留多少天?拉队列中的任务生命周期是否有限制?

从 google-app-engine 文档中,任务最多可以租用 1 周。

这也适用于任务生命周期吗?

0 投票
1 回答
159 浏览

google-app-engine - App engine pull queue expired tasks are getting deleted if leased again

I added sample pull queue and added deferred task to pull queue through servlet.

I added another servlet (Lease Servlet) to lease task, which leases 1 task for 5 minutes and just prints how many tasks it leased.

Now I checked by sending request to Lease Servlet within expired time (i.e., 5mins) which I am getting 0 tasks leased which is fine.

But if I lease task after 5 minutes, I am getting 0 tasks leased and got deleted from pull queue.

Is this expected behaviour? I thought the task will return back to pull queue and available.

Please help me.

0 投票
1 回答
267 浏览

google-app-engine - 在计算引擎中租赁应用程序引擎任务

我正在尝试从计算引擎实例中的拉取队列中租用应用程序引擎任务,但它一直出现此错误:

这是我正在使用的代码:

这似乎是一个身份验证问题,但如果我使用胡说八道的项目名称执行相同的租赁请求,它会给我完全相同的错误,所以我无法确定。
我还启动了启用任务队列的实例。
任何帮助将不胜感激

0 投票
1 回答
173 浏览

java - 拉队列leaseTasks 不返回任何TaskHandles

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

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

我正在 AppEngine 基础设施上对此进行测试,只有 1 个处理程序正在尝试leaseTasks

这就是我添加任务的方式

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

我在“TEST_QUEUE”中有 3 个任务(也从管理控制台确认了这一点)

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

0 投票
1 回答
60 浏览

java - 如何根据 GAE 拉取队列中的标签名称知道剩余的任务数

我有一个拉队列,我在其中使用 java 添加基于标记名的任务。我添加的不同任务组的标签名称不同。目前,在使用 groupbytag 从拉取队列中租用任务时,我正在随机获取任务,但我需要知道该标记名上拉取队列中剩余任务的数量。

我可以根据标签名称知道任务的数量吗?

0 投票
0 回答
166 浏览

java - Google App Engine 拉取队列

我正在 Google App Engine 上评估基于 Java 的应用程序。

我想在一个拉队列中创建一个特定的任务,该任务将由一个基本上无限期地从事该任务的工作人员(很可能是托管的虚拟机)拾取。为了确保任务被执行,我想让该工作人员从拉队列中租用一个任务,让我们说 1 分钟。

显示拉取队列交互的序列图

在那之后,如果工人还活着,我想延长租约(这确保它正在积极地做某事)。

我现在的问题是:是否有可能阻止工人延长租约以阻止工人?

如果这是不可能的,我将不得不打电话给工人并让他删除任务,但如果可以阻止他延长租约,那将更加优雅,除此之外,我必须删除无论如何,之后的任务

0 投票
1 回答
527 浏览

java - 如何识别任务是否已存在于 GAE 拉取队列中?

在将任务添加到拉取队列之前,我必须确认队列中是否已经存在相同的任务,如果存在应该跳过任务添加到队列。添加带有名称的任务对我不起作用,因为它直到队列中的 7 天才过期,甚至被删除。

我们可以使用REST API列出任务。同理,我们能否在 GAE 模块中获取任务列表,或者是否有其他方法可以在 Google App Engine 模块中查找任务是否存在于队列中?

谢谢

0 投票
1 回答
111 浏览

php - 如何将 PHP 谷歌应用引擎应用程序中的任务添加到拉取队列?

我正在尝试从基于 PHP 的 GAE 应用程序将任务添加到拉取队列。截至目前,拉取队列不支持 PHP,因此我希望有人能告诉我如何解决这个问题。到目前为止,我已经尝试了以下但失败了:

1)使用任务 API。

收到“403 错误:不允许进行此 API 调用”。

此 API 只能从 GAE 外部调用。

2)在 PHP 中使用 Shell_exec、exec、passthru 和系统命令执行 python 脚本以将任务添加到拉队列:收到警告

警告:出于安全原因,exec() 已在第 9 行的 /base/data/home/apps/s~apigraymatics/1.390159863933635324/public/pull/dummy1.php 中禁用

还有其他方法可以解决这个问题吗?谢谢

0 投票
0 回答
60 浏览

php - 当我从任务队列(拉)中列出任务时,出现错误

当我从 GAE 的任务队列(拉取)中列出任务时,出现错误。请给我解决方案:

我正在使用 AEQ 库:https ://github.com/tomwalder/php-appengine-pull-queue

我的代码是

我有一个错误

致命错误:/base/data/home/apps/s~apigraymatics/1.390942967888630935/public/pull/AEQ/Queue.php 中的消息“无法执行调用 [QueryTasks] 并带有:9 (PERMISSION_DENIED)”的未捕获异常“RuntimeException” :223 堆栈跟踪:#0 /base/data/home/apps/s~project/1.390942967888630935/public/pull/AEQ/Queue.php(197): AEQ\Queue->makeCall('QueryTasks', Object(google\ appengine\TaskQueueQueryTasksRequest), Object(google\appengine\TaskQueueQueryTasksResponse)) #1 /base/data/home/apps/s~project/1.390942967888630935/public/pull/listtask.php(13): AEQ\Queue->listTasks() #2 {main} 在第 223 行的 /base/data/home/apps/s~project/1.390942967888630935/public/pull/AEQ/Queue.php 中抛出

请帮我....