gpt4 book ai didi

php - Symfony:通过电子邮件发送失败的消息

转载 作者:行者123 更新时间:2023-12-04 12:38:18 25 4
gpt4 key购买 nike

我有一个简单的信使配置:

framework:
messenger:
failure_transport: failed
transports:
async:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
retry_strategy:
max_retries: 2
delay: 10000
failed: 'doctrine://default?queue_name=failed'

routing:
someInterface: async

我想知道路由到失败传输的每条消息当消息重定向时,系统应该向我发送电子邮件通知。我唯一的想法是定期审查 messenger_messages包含存储在失败传输中的消息的表,但 imao 它不是 symfony-way 解决方案。你知道这个功能更聪明的解决方案吗?

我正在使用 symfony/messenger 版本 5.*

最佳答案

最终,我应用了以下解决方案:

<?php
/**
* Author: writ3it
*/

namespace App\Maintenance\Messenger;


use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\MessageBusInterface;

class FailedMessageListener implements EventSubscriberInterface
{

/**
* @var MessageBusInterface
*/
private MessageBusInterface $bus;

public function __construct(MessageBusInterface $bus)
{
$this->bus = $bus;
}

public function onMessageFailed(WorkerMessageFailedEvent $event)
{
if ($event->willRetry()) {
return;
}
$envelope = $event->getEnvelope();
$message = $envelope->getMessage();

$subject = sprintf("Message added to failed transport. Message: %s", \get_class($message));
$content = serialize($message);

$notification = new FailedMessageNotificationEvent();
$notification->setSubject($subject)
->setContent($content);
$this->bus->dispatch($notification);
}

/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
WorkerMessageFailedEvent::class => ['onMessageFailed', -90],
];
}
}
FailedMessageNotificationEvent是将被我的邮件处理程序捕获的消息。 FailedMessageListener类应标记为 kernel.event_subscriber或自动配置。
我没有使用中间件,因为信使直接将消息发送到失败的传输,没有中间件。

关于php - Symfony:通过电子邮件发送失败的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62069619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com