Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Message not dispatched async despite configuring the handler route to be async in Symfony Messenger

I'm working with Symfony 4.4 and Symfony Messenger

Messenger configuration includes a transport and routing:

messenger:
    failure_transport: failed

    transports:
        async_medium:
            dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
            retry_strategy:
                max_retries: 3
                delay: 1000
        failed:
            ...

    routing:
        'Name\Space\MessageHandler\SnowplowNotificationHandler': async_medium

Though the handler looks like configured correctly (when I run console debug:messenger it shows up correctly assigned to transport)

Messenger

messenger.bus.default

 The following messages can be dispatched:
  Name\Space\Message\SnowplowMessage                                                  
     handled by Name\Space\MessageHandler\SnowplowEmailNotificationHandler  

The message class SnowplowMessage is not queued, but sent instantly to the _invoke() method of the handler.

I'm using AMQP (RabbitMQ as transport) and it's configured properly as no error is shown and the command console messenger:setup-transport creates the queue properly

like image 456
Florin Popescu Avatar asked Oct 12 '25 18:10

Florin Popescu


1 Answers

For some reason this seems to be an error that happens with some frequency, so I rather post an answer instead of a comment.

You are supposed to add message classes to the routing configuration, not handler classes.

Your configuration should be, if you want that message to be manages asynchronously:

routing:
        Name\Space\Message\SnowplowMessage: async_medium

What you are routing are message. Since the above configuration was missing, the default routing was processing the message syncrhonously.

like image 138
yivi Avatar answered Oct 14 '25 12:10

yivi