最佳答案
我在生产中使用了 Beanstalk,并且在测试时通过它抛出了数百万条简单消息 - 通常是批量的,但生产系统有超过 100,000 个任务通过它,直到我离开公司。它可能仍在运行,在这种情况下,现在的数量将达到数千万 - 甚至更多,如果他们按照我的计划进一步扩展它的使用范围的话。
我会推荐它,因为它有很多优点。
- 命名管可用于限制正在交付的作业。我根据机器主机名观看一个管道,它限制了工作程序的运行位置 - 对于仅存储在特定服务器上的上传文件很有用)。
- 延迟可用于设置 future 事件
- 最新版本的服务器还支持 bin-logging,提供持久性,尽管它从未对我造成崩溃。
我完成的第一个任务是图像处理 - 在 Apache/mod_php 进程之外完成这项工作使我能够在不影响服务器的情况下调整较大图像的大小(破坏 Web 服务器)。由于队列负载较轻,它在上传后刷新页面之前就创建了缩略图。
还有许多其他潜在的任务也可以异步处理。
我遇到的唯一问题是确保工作人员顺利完成 - 或者捕获任何错误,以便可以“埋葬”该作业,从而确保该作业不会被放回到队列中再次运行(并使工作线程再次崩溃)。
让工作进程重新启动以清除内存也很有用,因为 PHP 不太适合长时间运行的进程。
关于使用 beanstalkd 进行 PHP 异步处理。你推荐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1615682/