Symfony3 -后台任务由控制器启动,完成后发送电子邮件


Symfony3 - Background task launched by controller and send email when finished

我有一些函数需要很多时间,我希望它们在后台执行,并在完成时发送电子邮件。这些函数生成一个PDF作为响应,如果可能的话,我希望这个PDF附加到电子邮件。

这是一个耗时很长的独立函数:

$passages = $em->getRepository(PasserColle::class)->calculClassementAction($id, $group);

这个函数包含在我的控制器中的函数imprimerAction($id, $request)中,返回:

return new Response($html2pdf->Output('Classement.pdf'), 200, array('Content-Type' => 'application/pdf'));

我试图使用进程组件,但我不能使它工作,因为我不明白在括号中输入什么:

$process = new Process('ls -lsa');

以及如何得到我想要的输出

你可以使用RabbitMQ来完成这个操作,以及Symfony的这个包。

这个概念很简单。你将有生产者发送消息(使用你想要的格式)和消费者消费这些消息。消息在交换器中发布,并将被路由到等待新消息的消费者队列中。

在您的示例中,您可以生成一条消息,告诉Consumers生成pdf并发送电子邮件。发布一个JSON格式的消息,例如,在你的例子中,$id$group和消费者将做他们必须做的事情。

点击这个链接,了解如何做到这一点。

否则,如果你想使用进程组件,你可以简单地创建一个命令控制台,然后这样做:$process = new Process('php bin/console yourcommand')$process->run()

我只是希望它能帮到你。

问好。