Я настроил свой проект с помощью 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());
}
}






В конфигурации службы вы вручную помечаете обработчики сообщений.
В этом нет необходимости, если у вас включена автоконфигурация (нет) и вы используете атрибут AsMessageHandler в обработчиках.
Если автоконфигурация отключена (как в конфигурации вашего сервиса), атрибуты не действуют, поэтому для настройки обработчиков сообщений используются только теги, указанные вами в конфигурации сервиса. Другими словами, ваши обработчики не настроены с опцией fromTransport .
Я бы удалил теги в конфигурации сервиса, включил автонастройку и попробовал еще раз:
App\MessageHandler\Event\:
resource: '../src/MessageHandler/Event'
autoconfigure: true
Работает, спасибо :) Удаляю строки из Services.yaml