gpt4 book ai didi

Symfony 应用程序在获取 EntityManager 时卡住了

转载 作者:行者123 更新时间:2023-12-04 19:29:01 25 4
gpt4 key购买 nike

我正在开发一个具有 Web 组件(通过浏览器访问)和后台任务处理组件的应用程序,Web 组件将一些长时间运行的东西委托(delegate)给该组件。

当我刷新我的网络浏览器却发现它无限期地加载时,我刚刚遇到了一个问题(首先在 AJAX 中发现,但后来在正常请求中发现)。

它看起来并不明显,但只要我关闭后台Symfony命令也使用 EntityManager浏览器被解锁并继续请求。

我的应用程序使用 RabbitMQ存储由 Web 组件发布的作业请求。 Symfony命令使用相同的“主干”来创建 RabbitMQ消费者并承担消费这些工作。

我试过了,没有任何结果:

  • 重启Apache
  • 重述RabbitMQ
  • 吹扫RabbitMQ排队
  • 使用不同的 EntityManagers用于网络和命令

  • 我用 OldSoundRabbitMqBundle ( link ) 以促进两者之间的通信。

    无论调用什么操作,Web 组件都会卡住(与 RabbitMQ 生产者无关)。

    有没有人偶然发现类似的问题?

    这发生在开发盒上,我还没有在生产服务器上试一试,在我找到更多关于这个的信息之前我也不会。

    最佳答案

    看来我滥用了 Postgres 中的锁定机制。任务处理组件确实是一个长时间运行的任务,但鉴于它是 Symfony 命令,因此尽可能早地建立 Doctrine 连接。

    现在是棘手的部分:我用了LOCK TABLE用于锁定某些表以防止并发访问的语句(EXCLUSIVE 类型)。如果不关闭连接( 不是实体管理器 ),这些锁将保持不变,直到我重新启动命令(每 10 个任务)。

    这是根本原因。

    我仍在调查一些边缘情况,但自从我转向咨询锁定后,我没有更多的锁定。

    关于Symfony 应用程序在获取 EntityManager 时卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383131/

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