我正在考虑在我的新应用程序中使用RabbitMQ进行异步处理。
我面临的挑战之一是如何最好地处理数据库连接。我将使用Eloquent并且实际上是PDO。
我在网上找到的一个资源https://www.teqneers.de/2013/10/simple-spawn-rabbitmq-consumers-with-php/建议使用proc_open
生成一个新流程,但我对这种方法并不熟悉,并想知道是否有更好的方法。
我也尝试过在PHP守护程序中查找处理数据库连接的最佳实践,但没有找到任何内容。
我想过的一些事情。
创建新连接并按消息关闭
在消费者的整个生命周期内保持联系并经常杀死他们
在命令行上运行工作人员
我也想到了持久的联系,但在阅读了更多关于它们之后,似乎它们并不是我认为的那样。此外,很多帖子都说这无论如何都是个坏主意。
我理解PHP可能不是最好的工作,但我正在快速进行原型设计,PHP是我最适合这项任务的语言。
如果我能就如何处理这个问题得到一些建议,我将非常感激。
感谢。
答案 0 :(得分:1)
所以我决定使用proc_open
(实际上不使用proc_open
)和选项1和2的合并解决方案。
使用https://github.com/ricbra/rabbitmq-cli-consumer,这个cli工具处理消息的实际消耗,并通过命令行将其传递给PHP脚本(作为代理)。
每个消息运行一次PHP脚本,并根据退出代码返回(0:成功,1:失败),处理消息ACK。
该脚本在CLI上像普通的PHP脚本一样运行,因此您可以保持对资源处理的理解。这里没有守护进程。