Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Messenger] fromTransport in attribute not working #48529

Closed as not planned
Closed as not planned
@bzajacc

Description

@bzajacc

Symfony version(s) affected

5.4

Description

Handler attribute with fromTransport option not working

#[AsMessageHandler(fromTransport: self::QUEUE_NAME)]

and every handler is executed.

After adding the method with configuration, it works as intended:

public static function getHandledMessages(): iterable
{
    yield Foo::class => [
        'from_transport' => self::QUEUE_NAME,
    ];
}

How to reproduce

<?php
// messsenger.php

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

return static function (ContainerConfigurator $configurator) {
    $configurator->extension('framework', [ 'messenger' => [
        'serializer' => ['default_serializer' => 'messenger.transport.symfony_serializer'],
        'default_bus' => 'messenger.bus.default',
        'bus' => [
            'name' => 'messenger.bus.default'
        ],
        'transports' => [
            FooMessageHandler::QUEUE_NAME => [
                'dsn' => env('AMQP_TRANSPORT_DSN'),
                'options' => [
                    'confirm_timeout' => 0.5,
                    'exchange' => [
                        'name' => FooMessageHandler::QUEUE_NAME,
                        'type' => 'direct',
                    ],
                    'queues' => [
                        FooMessageHandler::QUEUE_NAME => [
                            'arguments' => [
                                'x-dead-letter-exchange' => 'X',
                            ],
                        ],
                    ],
                ],
            ],
            BarMessageHandler::QUEUE_NAME => [
                'dsn' => env('AMQP_TRANSPORT_DSN'),
                'options' => [
                    'exchange' => [
                        'name' => BarMessageHandler::QUEUE_NAME,
                        'type' => 'direct',
                    ],
                    'queues' => [
                        BarMessageHandler::QUEUE_NAME => [
                            'arguments' => [
                                'x-dead-letter-exchange' => 'Y',
                            ],
                        ],
                    ],
                ],
            ],
        ],
        'routing' => [
            IntegrationRequestMessage::class => [
                FooMessageHandler::QUEUE_NAME,
                BarMessageHandler::QUEUE_NAME,
            ],
        ],
    ]]);
};

Handlers:

#[AsMessageHandler(fromTransport: self::QUEUE_NAME)]
final class FooMessageHandler implements MessageHandlerInterface
{
    public const QUEUE_NAME = 'foo';

    public function __invoke(IntegrationRequestMessage $message): void
    {
        echo 'Foo';
    }
}
#[AsMessageHandler(fromTransport: self::QUEUE_NAME)]
final class BarMessageHandler implements MessageHandlerInterface
{
    public const QUEUE_NAME = 'bar';

    public function __invoke(IntegrationRequestMessage $message): void
    {
        echo 'Bar';
    }
}

Possible Solution

No response

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions