Метод delayUntil
Метод delayUntil принадлежит классу DelayStamp
и создаёт экземпляр штампа, который задерживает
обработку сообщения в очереди до заданного момента времени.
Первым параметром передаётся дата и время, раньше которого
сообщение не должно быть обработано.
Синтаксис
DelayStamp::delayUntil(\DateTimeInterface $datetime): DelayStamp
Пример
Давайте отложим обработку сообщения до 1 января 2030 года:
<?php
namespace App\Message;
use Symfony\Component\Messenger\Stamp\DelayStamp;
class ArticleMessage
{
public function __construct(
public string $text,
public DelayStamp $delay,
) {
}
}
?>
Теперь создадим и отправим сообщение с отложенной обработкой:
<?php
namespace App\Controller;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(MessageBusInterface $bus): Response
{
$delay = DelayStamp::delayUntil(new \DateTimeImmutable('2030-01-01 00:00:00'));
$bus->dispatch(new ArticleMessage('hello', $delay));
return new Response('dispatched');
}
}
?>
Результат выполнения кода:
"dispatched"
Пример
Давайте отложим обработку сообщения до момента, вычисленного относительно текущего времени:
<?php
namespace App\Controller;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(MessageBusInterface $bus): Response
{
$delay = DelayStamp::delayUntil(new \DateTimeImmutable('+1 hour'));
$bus->dispatch(new ArticleMessage('article', $delay));
return new Response('dispatched');
}
}
?>
Результат выполнения кода:
"dispatched"
Смотрите также
-
класс
DelayStamp,
который задаёт задержку обработки сообщения -
метод
delayFor,
который откладывает обработку на заданное число миллисекунд -
метод
dispatch,
который отправляет сообщение в шину -
класс
MessageBus,
который управляет обработкой сообщений