1

我正在使用 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

4

1 回答 1

1

使用 messenger,您没有“事件名称”。

您只需要发送适当的消息实例。

如果您正在发布一篇文章,而不是拥有一个通用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
    }
}
于 2020-04-08T07:23:29.070 回答