You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
bug symfony#52693 [Messenger] Fix message handlers with multiple from_transports (valtzu)
This PR was merged into the 6.3 branch.
Discussion
----------
[Messenger] Fix message handlers with multiple `from_transports`
| Q | A
| ------------- | ---
| Branch? | 6.3
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Issues | Fixsymfony#48529
| License | MIT
When you define multiple `AsMessageHandler` attributes or `messenger.message_handler` tags with otherwise same definitions but with different transports, the last definition overwrites all previous ones, despite `debug:messenger` showing it correctly:
```
The following messages can be dispatched:
--------------------------------------------------------------------------------------------------------------------
App\Message\TriggeringMessage
handled by App\MessageHandler\TriggeringMessageHandler (when from_transport=a)
handled by App\MessageHandler\TriggeringMessageHandler (when from_transport=b)
handled by App\MessageHandler\TriggeringMessageHandler (when method=handleTriggeringMessage, from_transport=a)
handled by App\MessageHandler\TriggeringMessageHandler (when method=handleTriggeringMessage, from_transport=b)
```
Example code:
```php
#[AsMessageHandler(fromTransport: 'a', handles: TriggeringMessage::class)]
#[AsMessageHandler(fromTransport: 'b', handles: TriggeringMessage::class)]
class TriggeringMessageHandler
{
public function __invoke(): void
{
echo __FUNCTION__."\n";
}
#[AsMessageHandler(fromTransport: 'a', handles: TriggeringMessage::class)]
#[AsMessageHandler(fromTransport: 'b', handles: TriggeringMessage::class)]
public function handleTriggeringMessage(): void
{
echo __FUNCTION__."\n";
}
}
```
When sending a `TriggeringMessage` to both `a` & `b` transports, I get following `bin/console messenger:consume a b` output on **6.3**:
```
[critical] Error thrown while handling message App\Message\TriggeringMessage. Removing from transport after 0 retries. Error: "No handler for message "App\Message\TriggeringMessage"."
__invoke
handleTriggeringMessage
```
And with this fix:
```
__invoke
handleTriggeringMessage
__invoke
handleTriggeringMessage
```
Commits
-------
bff3cc1 Fix message handlers with multiple from_transports
0 commit comments