Класс DelayStamp
Класс DelayStamp вешается на конверт сообщения
и указывает транспорту, через сколько миллисекунд
доставить сообщение в очередь. Первым параметром
передаётся целое число - задержка в миллисекундах.
Штамп можно добавить через метод with конверта
или с помощью статических методов delayFor
и delayUntil.
Синтаксис
new DelayStamp(int $delay)
Пример
Давайте отправим сообщение с задержкой в 5 секунд:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
class ArticleController extends AbstractController
{
public function index(MessageBusInterface $bus): Response
{
$bus->dispatch(new ArticleMessage('abcde'), [
new DelayStamp(5000),
]);
return new Response('dispatched');
}
}
?>
Результат выполнения кода:
"dispatched"
Пример
Давайте воспользуемся методом delayFor,
который создаёт штамп через объект DateInterval:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
class ArticleController extends AbstractController
{
public function index(MessageBusInterface $bus): Response
{
$bus->dispatch(new ArticleMessage('hello'), [
DelayStamp::delayFor(new \DateInterval('PT10S')),
]);
return new Response('delayed');
}
}
?>
Результат выполнения кода:
"delayed"
Пример
Давайте отложим сообщение до конкретной даты
с помощью метода delayUntil:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
class ArticleController extends AbstractController
{
public function index(MessageBusInterface $bus): Response
{
$bus->dispatch(new ArticleMessage('user'), [
DelayStamp::delayUntil(new \DateTimeImmutable('+1 hour')),
]);
return new Response('scheduled');
}
}
?>
Результат выполнения кода:
"scheduled"
Смотрите также
-
класс
Envelope,
который оборачивает сообщение и его штампы -
метод
with,
который добавляет штамп в конверт -
метод
delayFor,
который создаёт штамп через DateInterval -
метод
delayUntil,
который создаёт штамп до конкретной даты