我开发了一个系统,每个订单状态发送电子邮件给客户,但每次这封电子邮件花费5-15秒之间发送,因为这锁定新的请求,从该用户在网站上,直到完成发送,所以试图解决这个问题,我一直在数据库中保存这些电子邮件,每40秒。然后我向服务器发送一个 AJAX 请求来一起发送这些电子邮件,但php仍然阻止新的请求,直到电子邮件完成,我读到我需要开发一些像多线程的东西,但我使用symfony 5. 4,这比我想象的更复杂,我试图使用“curl_multi”来请求其他端点发送这些电子邮件,但它不工作
phpmailer Symfony 5.4.27 Php 8.2
1条答案
按热度按时间muk1a3rh1#
这是使用Symfony's Messenger component的一个很好的例子。Messenger几乎完全可以完成您想要完成的任务。它允许您将消息(任务)放入一个队列中,在常规的请求->响应周期之外异步处理。如何使用它的基本思想是:
__invoke()
方法定义一个消息处理程序,该方法接受一个消息作为其唯一参数。在您的例子中,这是您编写向客户发送电子邮件的逻辑的地方。MessageBusInterface
创建和分发消息。术语说明
请记住,本文中的术语 message 并不是指电子邮件或类似的东西--它是command bus design pattern(又名消息总线)的一部分。
引用