Symfony 6.1-如何运行将条目插入数据库的后台任务



我目前正在处理一个Symfony 6.1项目,有一个数据库插入需要生成相当多的条目(30k+(。我想将此插入过程作为后台任务运行,一旦在数据库中创建了所有条目,我想发送一封电子邮件。

现在,我在Symfony文档中找到了以下关于后台任务的文章:https://symfony.com/doc/current/components/process.html#running-异步处理

然而,我不太明白如何让流程在后台运行。

我当前的代码:

$process = new Process(); //not sure what to put in for the constructor
$process->start(function ($data) {
foreach($data as $key => $value) {
$value->setExampleValue("example");
$this->entityManager->persist($value);
$this->entityManager->flush();
}
... email code
});
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}

更新:
正如有人注意到的,我已经查看了Symfony的命令。现在,我尝试将自定义命令作为进程启动。但是,每次启动命令时,它都会失败,退出代码为:((。这是代码:

$process = new Process(['php binconsole app:generate-test']); 
//$process->setWorkingDirectory(substr(getcwd(), 0, strrpos(getcwd(), '/')));
$process->start();

if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}

然而,如果我通过控制台"启动"命令;php-bin/console应用程序:生成测试;它起作用了,我在控制台窗口中打印了一条简单的文本行。

有人知道我在这里做错了什么吗?

最终解决方案:

我没有使用Symfony的Process Component,而是按照评论中的建议使用Messenger Component。

这现在很有魅力!

我发现了一个很好的理解和实现信使的教程系列:https://www.youtube.com/watch?v=Xwn_BNfyjgk

我认为你应该看看命令(https://symfony.com/doc/current/console.html)

然后,您可以运行该命令并最小化控制台窗口,或者使用流程管理器(如Supervisor(在后台运行它。

最新更新