Symfony 6.4 Messenger 问题 #[AsMessageHandler(fromTransport: 'sync')]

问题描述 投票:0回答:1

我已经使用 Symfony 6.4 和 Messenger 配置了我的项目。我在事件总线上创建了 2 个传输(同步和异步)。当我发送消息时,该消息会通过 2 个传输进行传输,这就是我想要的。在处理程序上,我添加了 fromTransport 属性来定义处理程序运行的时间。通常,消息必须仅在传输同步时处理,但它也以异步方式运行......

如果我的配置出错或者这是一个错误,我不会,我已经打开了一个问题 https://github.com/symfony/symfony/issues/54543

messenger.yaml

messenger:
    reset_on_message: true
    buses:
        bus.event:
            default_middleware:
                enabled: true
                allow_no_handlers: true
    failure_transport: failed

    transports:
        async:
            dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
            options:
                queue_name: async
            retry_strategy:
                max_retries: 3
                delay: 60000
                multiplier: 2
                max_delay: 0
            serializer: messenger.transport.symfony_serializer

        failed: 'doctrine://default?queue_name=failed'

        sync: 'sync://'

    routing:
        App\Message\Event\MessageEventInterface: [async, sync]
when@test:
    framework:
        messenger:
            transports:
                async: 'in-memory://'

服务.yaml

    App\MessageHandler\Event\:
    resource: '../src/MessageHandler/Event'
    autoconfigure: false
    tags: [ { name: messenger.message_handler, bus: bus.event } ]

我的经纪人

    <?php

declare(strict_types=1);

namespace App\MessageHandler\Event\Test;

use App\Message\Event\Agent\AgentTestedEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;

#[AsMessageHandler(bus: 'bus.event', fromTransport: 'sync')]
class TestAgentTested extends TestAgentMessageHandlerAbstract
{

    public function __construct(private readonly LoggerInterface $logger)
    {
    }

    public function __invoke(AgentTestedEvent $testedEvent): void
    {

        $this->logger->error('test lance ' . $testedEvent->getAgentUuid());
    }
}
php symfony symfony-messenger
1个回答
0
投票

在服务配置中,您可以手动标记消息处理程序。

当您启用了自动配置(您没有)并在处理程序中使用 AsMessageHandler 属性时,这是不必要的。

禁用自动配置(如在服务配置中)属性不起作用,因此仅使用您在服务配置中指定的标签来配置消息处理程序。换句话说,您的处理程序未配置

fromTransport 
选项。

我会删除服务配置中的标签,启用自动配置并重试:

App\MessageHandler\Event\:
resource: '../src/MessageHandler/Event'
autoconfigure: true
© www.soinside.com 2019 - 2024. All rights reserved.