Jov*_*vic 5 entitymanager rabbitmq symfony doctrine-orm
我正在开发一个具有Web组件(通过浏览器访问)和后台任务处理组件的应用程序,Web组件将一些运行时间长的东西委托给该应用程序。
当我刷新Web浏览器时才发现它无限期加载(刚发现是AJAX,但后来出现在正常请求中),这只是一个问题。
它看起来似乎并不很明显,但是一旦我关闭了后台Symfony命令,该命令也利用EntityManager了浏览器,它就会被解除阻止并继续进行请求。
我的应用程序用于RabbitMQ存储由Web组件发布的作业请求。该Symfony命令使用相同的“主干”来创建RabbitMQ使用者并接受这些作业。
我试过了,没有任何结果:
ApacheRabbitMQRabbitMQ队列EntityManagers对Web和命令使用不同我使用OldSoundRabbitMqBundle(link)促进两者之间的通信。
无论调用什么操作,Web组件都会卡住(与RabbitMQ生产者无关)。
有人偶然发现类似问题吗?
这发生在开发箱上,我还没有在生产服务器上试用它,直到我找到更多有关此事的机会。
看来我滥用了 Postgres 中的锁定机制。事实上,任务处理组件是一个长时间运行的任务,但考虑到它是 Symfony 命令,Doctrine 连接正在尽早建立。
现在是棘手的部分:我使用该LOCK TABLE语句锁定了一些表,使其远离并发访问(EXCLUSIVE类型)。在不关闭连接(不是实体管理器)的情况下,这些锁将保持不变,直到我重新启动命令(每 10 个任务)。
这是根本原因。
我仍在调查一些边缘情况,但自从我转向咨询锁定后,我就没有更多的锁定了。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |