支持Enqueue
Enqueue 是一个 MIT 许可的开源项目,它的持续开发完全得益于社区和我们客户的支持。如果您想加入他们,请考虑:
异步命令
安装
$ composer require enqueue/async-command:0.9.x-dev
配置
# config/packages/enqueue_async_commands.yaml
enqueue:
default:
async_commands:
enabled: true
timeout: 60
command_name: ~
queue_name: ~
用例
<?php
use Enqueue\Client\ProducerInterface;
use Enqueue\AsyncCommand\Commands;
use Enqueue\AsyncCommand\RunCommand;
use Symfony\Component\DependencyInjection\ContainerInterface;
/** @var $container ContainerInterface */
/** @var ProducerInterface $producer */
$producer = $container->get(ProducerInterface::class);
$cmd = new RunCommand('debug:container', ['--tag=form.type']);
$producer->sendCommand(Commands::RUN_COMMAND, $cmd);
您也可以选择获得命令执行的结果:
<?php
use Enqueue\Client\ProducerInterface;
use Enqueue\AsyncCommand\CommandResult;
use Enqueue\AsyncCommand\Commands;
use Enqueue\AsyncCommand\RunCommand;
use Symfony\Component\DependencyInjection\ContainerInterface;
/** @var $container ContainerInterface */
/** @var ProducerInterface $producer */
$producer = $container->get(ProducerInterface::class);
$promise = $producer->sendCommand(Commands::RUN_COMMAND, new RunCommand('debug:container'), true);
// 做其他事情。
if ($replyMessage = $promise->receive(5000)) {
$result = CommandResult::jsonUnserialize($replyMessage->getBody());
echo $result->getOutput();
}