Как установить название события и время задержки в конверте?

Я использую symfony 4 + enqueue (https://github.com/sroze/messenger-enqueue-transport + https://packagist.org/packages/enqueue/pheanstalk ) для запуска асинхронных заданий в beanstalk.

Прямо сейчас у меня есть:

/**
 * @var Symfony\Component\EventDispatcher\EventDispatcherInterface 
 */
private $eventDispatcher;

$event = new ArticleEvent("test title", "test description");
$this->eventDispatcher->dispatch($event, "article.publish");

Но я хочу, чтобы это задание было обработано с опозданием.

Документация подсказывает мне рефакторинг, например:

use Enqueue\MessengerAdapter\EnvelopeItem\TransportConfiguration;
use Symfony\Component\Messenger\Envelope;

$event = new ArticleEvent("test title", "test description");
$transportConfig = (new TransportConfiguration())->setDeliveryDelay(5000);

$this->eventDispatcher->dispatch((new Envelope($event))->with($transportConfig));

Проблема в том, что я не вижу, где разместить название события (article.publish)

(На основе https://github.com/sroze/messenger-enqueue-transport#setting-custom-configuration-on-your-message)


person FrakyDale    schedule 08.04.2020    source источник


Ответы (1)


В мессенджере у вас нет «названий событий».

Вам просто нужно отправить соответствующий экземпляр сообщения.

Если вы публикуете статью, вместо общего класса ArticleEvent создайте команду PublishArticle или событие ArticlePublished.

Выбор между ними зависит от того, регистрируете ли вы событие (то, что уже произошло) или команду (то, что вы хотите, чтобы произошло).

Создать обработчик для этих сообщений так же просто, как создание MessageHandlerInterface реализующего класса:

use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

class PublishArticleHandler implements MessageHandlerInterface
{
    public function __invoke(PublishArticle $message)
    {
        // ... do some work - like publishing the article
    }
}
person yivi    schedule 08.04.2020
comment
Ой, как тогда я на них подписываюсь? Я использовал метод getSubscribedEvents (), который использует имена событий: symfony. com / doc / current / components / - person FrakyDale; 08.04.2020
comment
Если вы используете Messenger, вам необходимо создать обработчики сообщений. Смотрите не на документацию диспетчера событий, а на документы Symfony Messenger. Например, это или this. - person yivi; 08.04.2020