gpt4 book ai didi

mysql - 在长时间运行的后台脚本中处理 doctrine 2 连接

转载 作者:行者123 更新时间:2023-11-29 02:23:37 28 4
gpt4 key购买 nike

我正在运行 PHP 命令行脚本作为需要连接到 MySQL 数据库的 rabbitmq 消费者。这些脚本运行为 Symfony2 commands使用 Doctrine2 ORM,意味着打开和关闭数据库连接是在幕后处理的。当 cli 命令退出时,连接通常会自动关闭 - 根据定义,这在后台消费者中不会长时间发生。

当消费者空闲(没有传入消息)的时间超过 MySQL 服务器配置中的 wait_timeout 设置时,就会出现问题。如果没有消息被消耗超过该时间段,数据库服务器将关闭连接,下一条消息将失败并出现 MySQL server has gone away 异常。

我想到了 2 个问题的解决方案:

  1. 在每条消息前打开连接,处理完消息后手动关闭连接。
  2. 实现 ping 消息,每 n 分钟运行一次虚拟 SQL 查询,例如 SELECT 1 FROM table,并使用 cronjob 调用它。

第一种方法的问题是:如果该队列上的流量很高,则消费者在打开/关闭连接时可能会有很大的开销。第二种方法听起来像是处理问题的丑陋黑客,但至少我可以在高负载期间使用单个连接。

是否有更好的解决方案来处理后台脚本中的学说连接?

最佳答案

这是另一个解决方案。尽量避免长时间运行 Symfony 2 Workers。由于执行时间长,它们总是会引起问题。内核不是为此而生的。

这里的解决方案是在真正的 Symfony 命令之前构建一个代理。所以每条消息都会触发一个新的 Symfony 内核。声音对我来说是一个很好的解决方案。

http://blog.vandenbrand.org/2015/01/09/symfony2-and-rabbitmq-lessons-learned/

关于mysql - 在长时间运行的后台脚本中处理 doctrine 2 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27224194/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com