php - 支持作业批处理的排队系统(例如,一次为 1 个 worker 处理多个作业)

标签 php gearman beanstalkd

我正在寻找可以支持以下场景的排队系统:

  • 客户添加了一项工作 - 检查特定 url (URL1) 有多少 Facebook 点赞;
  • 客户添加了另一项工作 - 检查 URL2 的相同信息;
  • [....]

  • 一名工作人员从队列中选择 1 到 50 个工作(网址)(例如,如果只有 5 个 - 它选择 5 个,如果有 60 个 - 选择 50 个,将其他工作留给另一个工作人员),并针对 Facebook API 发出请求(每个请求允许多个 url)。如果成功,所有作业都会从队列中取出,如果失败 - 所有作业都会保留。

我正在使用 PHP,我研究了 Gearman , Beanstalkd ,但没有发现任何类似的功能。是否有任何(免费的)排队系统支持这种“批量出队”?

或者,也许有人可以建议一种处理此类问题的替代方法?我考虑过在排队系统之外保留一个“待检查”URL 列表,然后将它们添加到最多 N 个项目的 bundle 中,并使用每 X 周期运行一次的 cron 作业。但这有点像是在构建您自己的队列,这违背了整个目的,不是吗?

最佳答案

我曾使用 Beanstalkd 一次获取 100 个推特名称,然后用它们调用一个 API。完成后,我删除了它们 - 但如果我愿意,我可以选择不删除部分(或全部)。

保留最初的 100 个(一次一个)是一个简单的循环,我将结果(作业 ID 和返回的数据)放入一个数组中。当我处理完负载(在本例中为 Twitter 屏幕名称)后,我删除了它们 - 但我本可以轻松地将它们释放回队列中。

关于php - 支持作业批处理的排队系统(例如,一次为 1 个 worker 处理多个作业),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550574/

相关文章:

php - CakePHP 3 : Preselect checkboxes when editing belongsToMany Model

php - Hidden Div 没有隐藏在 3g 网络上,但在 wi-fi 上工作正常

php - 随着时间的推移,增加 Gearman Worker 的 CPU 使用率

message-queue - 具有延迟的简单可扩展工作/消息队列

php - beanstalkd 和hadoop 集成有什么好的方法吗?

javascript - js window.redirect 不断更新

php - 使用ajax函数和php删除行

macos - 在 mac osx 上使用 libdrizzle 安装 gearman

php - Gearman Worker 定期断开连接

linux - 适用于 CentOs 7 的 Beanstalkd