如何在服务中使用 kernel.terminate 事件

2023-12-14

我做了一个运行繁重任务的服务,该服务在控制器中调用。 为了避免页面加载时间过长,我想返回 HTTP 响应并在之后运行繁重的任务。

我读过我们可以使用 kernel.terminate 事件来做到这一点,但我不明白如何使用它。

目前我尝试在 KernelEvent:TERMINATE 上执行侦听器,但我不知道如何过滤,因为侦听器仅在好页面上执行作业...

是否可以添加一个在事件触发时执行的函数?然后在我的控制器中,我只是使用该函数来添加我的操作,Symfony 稍后执行它。

感谢您的帮助。


最后,我找到了如何做到这一点,我在我的服务中使用 EventDispatcher 并在此处连接一个侦听器 PHP 闭包:http://symfony.com/doc/current/components/event_dispatcher.html#connecting-listeners

use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpKernel\KernelEvents;

class MyService
{
  private $eventDispatcher;

  public function __construct(TokenGenerator $tokenGenerator, EventDispatcherInterface $eventDispatcher)
  {
   $this->tokenGenerator = $tokenGenerator;
   $this->eventDispatcher = $eventDispatcher;
  }

  public function createJob($query)
 {
    // Create a job token
    $token = $this->tokenGenerator->generateToken();

    // Add the job in database
    $job = new Job();
    $job->setName($token);
    $job->setQuery($query);

    // Persist the job in database
    $this->em->persist($job);
    $this->em->flush();

    // Call an event, to process the job in background
    $this->eventDispatcher->addListener(KernelEvents::TERMINATE, function (Event $event) use ($job) {
        // Launch the job
        $this->launchJob($job);
    });

    return $job;
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在服务中使用 kernel.terminate 事件 的相关文章

随机推荐

  • 更改 Xcode 中的工作目录

    我设法使用 cmake G Xcode 在 Xcode 中运行我的 C 项目 现在我想调试它 因为它提供了很好的 gdb 前端 但是我需要更改执行 gdb 的工作目录 否则它将无法工作 它需要从相对于工作目录路径的文件中读取一些数据 我能做
  • asp.net 母版页以什么顺序执行

    我在我的项目中使用母版页 我想知道母版页和网页的页面加载顺序以及脚本的执行顺序 母版页子控件初始化 首先初始化母版页中包含的所有服务器控件 内容页子控件初始化 初始化内容页中包含的所有服务器控件 母版页初始化 母版页本身被初始化 内容页初始
  • 如何在 OSGi (Apache Felix) 中处理不同的日志记录解决方案

    在 OSGi 中 日志记录前端和实际输出之间是分离的 因此 通过使用日志服务 这并不意味着例如将任何内容写入控制台 这就是一个日志读取服务为 负责 在我当前的运行时 我正在添加org apache felix log它带来了一个 LogRe
  • 是否有 VS Code API 函数可以返回所有打开的文本编辑器及其视图列?

    I got a 功能要求为了我的扩展保存和恢复选项卡为了实现它 我需要能够获得所有 编辑器组 中所有打开的文本编辑器的列表 在 API 1 46 中 可以获得所有可见文本编辑器的列表 每组只有一个文本编辑器 和所有打开的文本文档的列表 与使
  • 为什么Windows服务不调用OnStart方法?

    我创建了一个 Windows 服务应用程序 其中包含OnStart方法 该方法将从中读取路径应用程序配置文件 创建一个对象 然后服务写入该对象的重写ToString 方法到一个文件StreamWriter 当我使用 手动启动此服务 时 这是
  • php三元运算符格式化

    这有效
  • C / C++ 中的关键字重新定义

    我可以在 C 中使用 define 重新定义关键字吗 我在 C 标准中发现了这一点 ISO IEC 14882 1998 和 ISO IEC 14882 2003 17 4 3 1 1 宏名称 lib macro names 2 包含标题的
  • Xaml 中的动态列绑定

    这是之前帖子的后续问题 here 我有一些 标题 信息存储为 Dictionary
  • 每秒更改图片框中的图像 C#

    我正在创建一个 WinForm 应用程序 它用网络摄像头拍摄一个人的照片 现在正在尝试创建倒计时效果 我有 4 张图像想要循环浏览 但事实证明这很难完成 我使用了秒计时器 但所发生的只是应用程序有点滞后 然后显示最后一张图像 有谁知道我如何
  • SetBounds 和 SetBoundsCore 有什么区别

    在 WinForms 中 您可以使用以下命令设置控件的边界SetBounds 或者如果您已经创建了用户控件 则可以覆盖SetBoundsCore 我想知道 他们的做法相同还是有什么不同 首先SetBounds不是虚拟的 因此如果您需要在设置
  • VSCode 仅导航回本地到当前文件?

    VSCode 中是否有一个选项可以限制 向后导航 这样它只会带您返回光标在当前文件中最后一个位置 这是当前的行为 在文件A上 打开方法foo 在文件A上 打开方法栏 关于文件B 打开方法baz 在文件A上 打开方法bor 如果我在 bor
  • 通过匹配键组合两个不相等的数组

    我想将下面的两个数组合并为一个 更具体地说 我想将第二个数组的内容添加到第一个数组中的匹配键 最终数组中的键应该具有两个数组的匹配键的内容 Array 123456789 404045862944400 gt 192 123456789 4
  • Chef apt_repository 开始失败并出现 SSL 验证错误

    从过去 2 天开始 我们开始看到与 apt repository 资源相关的 Chef 执行失败 厨师 客户执行也遇到了类似的失败 主厨独奏版本 12 19 36 操作系统 Ubuntu 14 中的 Ubuntu v18 请参阅 Chef
  • JavaScript 会成为一种“正确的”基于类的语言吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我指的是 MDN 关于 JavaScript 的 未来保留字 的文章 用于新的严格模式 https developer mozilla org en US docs Web JavaScr
  • 有人可以告诉我如何用循环替换以下 javascript 代码吗?

    dataBase 0 valueline d3 svg line x function d return x d Date y function d return y d dataBase 0 columnline dataBase 1 v
  • 如何使用 IAccessible 在 Firefox 中访问文档的 HTML

    我可以使用以下代码从 Firefox 窗口获取 IAccessible 对象 Guid guid new Guid 618736E0 3C3D 11CF 810C 00AA00389B71 object obj null int ret A
  • TDD:为什么让应用程序代码知道它正在测试而不是运行可能是错误的?

    In 这个线程 布莱恩 唯一的回答者 说 你的代码应该以与测试无关的方式编写 单个评论说 你的代码绝对不应该在全局 我正在测试标志 上分支 但都没有给出理由 我会really喜欢听一些关于此事的理性想法 进入给定的应用程序类并设置一个布尔值
  • CocoaPods 未安装或未处于有效状态

    Launching lib main dart on iPhone 11 Pro Max in debug mode Warning CocoaPods is installed but broken Skipping pod instal
  • 后台任务中的 Toast 通知响应

    我正在编写一个可以在后台任务中显示 toast 通知的应用程序 我使用BackgroundTaskBuilder 在通知中 我使用两个按钮 它们应该执行两个不同的功能 但我无法获得通知的响应 我在互联网上读到我应该为此启动另一个后台任务 但
  • 如何在服务中使用 kernel.terminate 事件

    我做了一个运行繁重任务的服务 该服务在控制器中调用 为了避免页面加载时间过长 我想返回 HTTP 响应并在之后运行繁重的任务 我读过我们可以使用 kernel terminate 事件来做到这一点 但我不明白如何使用它 目前我尝试在 Ker