我正在寻找一个可以支持以下场景的排队系统:
[...]
一个工人从队列中挑选1到50个工作(网址)(例如,如果只有5个 - 它拿到5个,如果有60个 - 拿起50个,其他人拿到另一个工人),并发出针对Facebook API的请求(每个请求允许多个网址)。如果成功,所有作业都将从队列中取出,如果失败 - 所有作业都将保留。
我正在使用PHP,我调查了Gearman,Beanstalkd,但没有找到任何类似的功能。是否有任何(免费)排队系统支持这种“批次出列”?
或者,或许,任何人都可以提出另一种处理此类问题的方法?我已经考虑在排队系统之外保留一个“检查”网址列表,然后在每个X周期运行一个cron作业的最多N个项目的捆绑中添加它们。但那是建立自己的队列,这会破坏整个目的,不是吗?
答案 0 :(得分:1)
我已经使用Beanstalkd一次获取100个推特名称,然后用它们全部调用API。当我完成后,我删除了它们 - 但如果我愿意,我可以选择不删除一些(或全部)。
这是一个简单的循环来保留初始100(一次一个),然后我将结果(作业ID和返回的数据)放入一个数组中。当我完成处理有效负载(在这个例子中,是一个推特屏幕名称)时,我经历了删除它们 - 但我可以很容易地将它们释放回队列。
答案 1 :(得分:0)
也许你可以从MediaWiki's job queue system中获取灵感。不是很复杂,但如果您决定自己动手,它可能会遇到some issues。
用于此目的的数据库表定义为here。