PHP Mailer异步与symfony

pgccezyw  于 10个月前  发布在  PHP
关注(0)|答案(1)|浏览(77)

我开发了一个系统,每个订单状态发送电子邮件给客户,但每次这封电子邮件花费5-15秒之间发送,因为这锁定新的请求,从该用户在网站上,直到完成发送,所以试图解决这个问题,我一直在数据库中保存这些电子邮件,每40秒。然后我向服务器发送一个 AJAX 请求来一起发送这些电子邮件,但php仍然阻止新的请求,直到电子邮件完成,我读到我需要开发一些像多线程的东西,但我使用symfony 5. 4,这比我想象的更复杂,我试图使用“curl_multi”来请求其他端点发送这些电子邮件,但它不工作
phpmailer Symfony 5.4.27 Php 8.2

muk1a3rh

muk1a3rh1#

这是使用Symfony's Messenger component的一个很好的例子。Messenger几乎完全可以完成您想要完成的任务。它允许您将消息(任务)放入一个队列中,在常规的请求->响应周期之外异步处理。如何使用它的基本思想是:

  • 定义一个存储一些数据的消息类。在您的情况下,可能只需订单ID就足够了。
  • __invoke()方法定义一个消息处理程序,该方法接受一个消息作为其唯一参数。在您的例子中,这是您编写向客户发送电子邮件的逻辑的地方。
  • 在控制器或服务中,通过MessageBusInterface创建和分发消息。
  • 配置一个传输,告诉Symfony异步处理你的消息。
  • 运行消费者进程,它将监视队列中的新消息,并对它们执行处理程序中定义的操作。

术语说明

请记住,本文中的术语 message 并不是指电子邮件或类似的东西--它是command bus design pattern(又名消息总线)的一部分。

引用

相关问题