我正在工作一个图像处理网站,而不是有冗长的作业阻碍用户浏览器,我希望所有的命令返回快速与一个作业id,并有一个后台任务来做实际工作。然后,可以使用该id来检查状态和结果(即处理后的图像的url )。我发现了很多用于ruby、java和python的分布式队列管理器,但我对这些语言的了解还不够多,无法使用它们。
我自己的测试是使用共享的mysql数据库对作业进行排队,将它们锁定到一个worker,并将它们标记为已完成(将返回数据保存在db中)。它只是一个凌乱的原型,整个过程中我都觉得自己好像在重新发明轮子(而且不是很优雅)。php中有没有什么东西(或者我可以和RESTfully对话?)我能用到的吗?
再读一遍,我发现我要找的是一个有php api的队列系统,它不需要用php编写。我只找到了与Amazon的SQS一起使用的类,但这不仅不是免费的,它有时也是相当潜在的(一分钟以上的消息显示)。
发布于 2009-03-18 18:54:40
你试过ActiveMQ吗?它提到了通过Stomp协议支持PHP。有关详细信息,请访问the activemq site。
我已经从你所描述的数据库方法中获得了很多经验,所以我不会太担心它。
发布于 2009-03-18 18:44:44
您是否拥有对服务器的完全控制权?
在这种情况下,MySQL队列可能没问题。有一个不断运行的PHP脚本(在无限的while循环中),在MySQL数据库中查询新的“任务”,并在两者之间执行睡眠(),以减少空闲时间的负载。
每项任务完成后,在数据库中对其进行标记并移动到下一项任务。
为了防止在脚本崩溃/存在(PHP内存溢出等)时整个过程停止例如,您可以将它放在inittab中(如果您使用Linux作为服务器),init将自动重新启动它。
发布于 2009-04-07 01:52:14
Zend_Framework有一个queue类,有一些Mysql支持的实现,SQS和其他一些后端。
就我个人而言,我最近用BeanstalkD取得了很好的结果,它也有一个PHP客户端。我只是用JSON序列化一些数据放入其中,这些数据被解码并在worker(s)上运行。
https://stackoverflow.com/questions/659455
复制相似问题