3

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

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

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

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

或者,也许,任何人都可以提出处理此类问题的替代方法?我已经考虑在排队系统之外保留一个“要检查”的 url 列表,然后将它们添加到最多 N 个项目的捆绑中,并使用每 X 个周期运行的 cron 作业。但这有点建立自己的队列,这违背了整个目的,不是吗?

4

2 回答 2

1

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

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

于 2012-03-29T21:45:38.047 回答
0

也许您可以从MediaWiki 的作业队列系统中获得灵感。不是很复杂,但如果你决定自己动手,它确实有一些问题可能会遇到。

用于此的 DB 表在此处定义。

于 2012-03-03T22:59:36.137 回答