php - Messenger 工作人员在 Symfony 4 测试中闲置/不“工作”
问题描述
我正在尝试测试我通过 Symfony 中的 Messenger 处理一些数据的过程。
我尝试以下方法:
首先,我定义了我的工人。
$event_dispatcher = $this->getContainer()->get(EventDispatcherInterface::class);
$logger = $this->getContainer()->get(LoggerInterface::class);
$message_bus = $this->getContainer()->get(MessageBusInterface::class);
$transport = $this->getContainer()->get("messenger.transport.async");
$worker = new Worker([$transport], $message_bus, $event_dispatcher, $logger);
然后在此之后,一些代码运行,向信使发送消息。我测试了这段代码,效果很好。通过转储 $transport->get() 我看到我的消息已成功发送到工作人员和数据库。
现在在我的单元测试结束时,我通过 $worker->run() 运行 worker。由于信使只处理几个动作/查询,它应该只需要一点时间就可以完成。但看起来它只是在那里闲置。我在 $worker->run() 之后直接调用 $worker->stop() 但它没有到达那里。
解决方案
除非您设置限制或工作人员崩溃,否则将Worker
继续运行并处理队列,因此您看到的行为是有意的。
您可以使用官方提供的以下代码示例ConsumeMessagesCommand
来修改您的工人:
<?php
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Messenger\EventListener\StopWorkerOnMessageLimitListener;
use Symfony\Component\Messenger\EventListener\StopWorkerOnTimeLimitListener;
$eventDispatcher->addSubscriber(
// stop after 10 messages (but won't stop when fewer are processed)
new StopWorkerOnMessageLimitListener(10)
);
$eventDispatcher->addSubscriber(
// stop after 10 seconds (can take longer when the message processing exceeds the 10 seconds)
new StopWorkerOnTimeLimitListener(10)
);
推荐阅读
- python - Pandas,在整行上应用两个函数的最有效方法
- c++ - RTSP 音频反向通道 (ONVIF) - 如何实现
- getstream-io - 如何将自定义 Header 添加到 Stream Feed Activity?
- drupal - 如何在块树枝模板中显示当前页面的字段
- sql - 如何在sql中具有一定数量的重复项的范围之间创建一个随机数
- python - 使用汤,find_all 返回一个 [ ] 值
- python - 训练 Keras 模型期间的 GPU 使用率为 1%
- javascript - pdfmake中分页符处的动态副标题问题
- python - 如何在 Excel 中使用“FindNext”?
- c# - 从周期性异步请求中创建 observable