Envelope中如何设置事件名称和延迟时间?
How to set event name and delay time in Envelope?
我正在使用 symfony 4 + 入队 (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)
有了 Messenger,你没有 "event names"。
您只需发送适当的消息实例。
如果您要发布文章,而不是使用通用 ArticleEvent
class,请构建 PublishArticle
命令或 ArticlePublished
事件。
两者之间的选择取决于您是注册一个事件(已经发生的事情)还是一个命令(您想要发生的事情)。
Creating a handler for these messages 就像创建一个 MessageHandlerInterface
实现 class:
一样简单
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class PublishArticleHandler implements MessageHandlerInterface
{
public function __invoke(PublishArticle $message)
{
// ... do some work - like publishing the article
}
}
我正在使用 symfony 4 + 入队 (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)
有了 Messenger,你没有 "event names"。
您只需发送适当的消息实例。
如果您要发布文章,而不是使用通用 ArticleEvent
class,请构建 PublishArticle
命令或 ArticlePublished
事件。
两者之间的选择取决于您是注册一个事件(已经发生的事情)还是一个命令(您想要发生的事情)。
Creating a handler for these messages 就像创建一个 MessageHandlerInterface
实现 class:
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class PublishArticleHandler implements MessageHandlerInterface
{
public function __invoke(PublishArticle $message)
{
// ... do some work - like publishing the article
}
}