php中有哪些优秀的分布式队列管理器?

时间:2009-03-18 18:05:54

标签: php queue distributed

我正在使用一个图像处理网站,而不是让用户浏览器占用冗长的工作量我希望所有命令都能快速返回作业ID并让后台任务完成实际工作。然后可以使用id来检查状态和结果(即处理图像的URL)。我已经为ruby,java和python发现了很多分布式队列管理器,但我不知道这些语言中是否足够能够使用它们。

我自己的测试是使用共享的mysql数据库来排队作业,将它们锁定到一个worker,并将它们标记为已完成(在db中保存返回数据)。这只是一个混乱的原型,整个时间我觉得好像我正在重新发明轮子(而不是非常优雅)。 php中是否存在某些内容(或者我可以与RESTful交谈?)我可以使用吗?

阅读更多内容,我发现我正在寻找的是一个具有php api的排队系统,它不必用php编写。我只找到了与亚马逊SQS一起使用的课程,但这不仅是免费的,而且有时也是非常潜在的(一分钟内会显示一条消息)。

3 个答案:

答案 0 :(得分:5)

你试过ActiveMQ吗?它提到了通过Stomp协议支持PHP。详情请见the activemq site

我已经从你描述的数据库方法中获得了很多好处,所以我不会太担心它。

答案 1 :(得分:3)

您是否可以完全控制服务器?

在这种情况下,MySQL队列可能没问题。拥有一个不断运行的PHP脚本(在无限循环中运行),查询MySQL数据库中的新“任务”和睡眠()以减少空闲时间的负载。

完成每项任务后,在数据库中标记并移至下一个任务。

如果您的脚本崩溃/存在(PHP内存溢出等),为了防止整个事情停止,您可以将它放在inittab中(如果您使用Linux作为服务器)并且init将重新启动它自动。

答案 2 :(得分:2)

Zend_Framework有一个队列类,有许多Mysql支持的实现,SQS和其他一些后端。

就个人而言,我最近在BeanstalkD获得了优秀的成绩,其中还有一个PHP客户端。我只是用JSON将一些数据序列化,然后将其解析并在worker上运行。