Проблема Symfony 6.4 Messenger с #[AsMessageHandler(fromTransport: 'sync')]

Я настроил свой проект с помощью Symfony 6.4 и Messenger. Я создал 2 транспорта (синхронный и асинхронный) на шине событий. Когда я отправляю сообщение, оно отправляется на два транспорта, это то, что мне нужно. В обработчике я добавил атрибут fromTransport, чтобы определить, когда запускается обработчик. Обычно сообщение должно обрабатываться только тогда, когда транспорт синхронизирован, но он также работает и асинхронно...

Нет, если я допустил ошибку в своей конфигурации или если это ошибка, я открыл проблему https://github.com/symfony/symfony/issues/54543

мессенджер.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://'

Services.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 в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
245
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конфигурации службы вы вручную помечаете обработчики сообщений.

В этом нет необходимости, если у вас включена автоконфигурация (нет) и вы используете атрибут AsMessageHandler в обработчиках.

Если автоконфигурация отключена (как в конфигурации вашего сервиса), атрибуты не действуют, поэтому для настройки обработчиков сообщений используются только теги, указанные вами в конфигурации сервиса. Другими словами, ваши обработчики не настроены с опцией fromTransport .

Я бы удалил теги в конфигурации сервиса, включил автонастройку и попробовал еще раз:

App\MessageHandler\Event\:
resource: '../src/MessageHandler/Event'
autoconfigure: true

Работает, спасибо :) Удаляю строки из Services.yaml

eldiablo62 25.04.2024 18:41

Другие вопросы по теме