Skip to content

Symfony messenger with JSON serializer and AMQP transport (via RabbitMQ) failed to retry messages #42857

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
B-Galati opened this issue Sep 2, 2021 · 12 comments

Comments

@B-Galati
Copy link
Contributor

B-Galati commented Sep 2, 2021

Symfony version(s) affected: 5.3.X

Description

How to reproduce

  1. Setup messenger with AMQP and RabbitMQ and a retry strategy
  2. Setup a handler that throws an Exception
  3. Enable JSON serialization of messages
framework:
  messenger:
    serializer:
      default_serializer: messenger.transport.symfony_serializer
      symfony_serializer:
        format: json
        context: { }
  1. Dispatch a message
  2. Consume the message once
  3. Wait for requeue
  4. Consume the message and you will the error below.
14:47:12 CRITICAL  [console] Error thrown while running command "-vv -n messenger:consume async events signature_processing commands emails webhook_notifier webhook_sender --limit 1". Message: "Notice: Undefined index: class" - Notice: Undefined index: class ["exception" => ErrorException { …},"command" => "-vv -n messenger:consume async events signature_processing commands emails webhook_notifier webhook_sender --limit 1","message" => "Notice: Undefined index: class","tracing_id" => "499ba7b6-50df-4188-830c-262467a0514d"] ["channel" => "console","programming_language" => "php","php_uname" => "Linux","php_sapi_name" => "cli","php_version" => "7.4.23","framework" => "symfony","symfony_version" => "5.3.6"]

In FlattenExceptionNormalizer.php line 73:

  [ErrorException]
  Notice: Undefined index: class


Exception trace:
  at /api/vendor/symfony/messenger/Transport/Serialization/Normalizer/FlattenExceptionNormalizer.php:73
 Symfony\Component\Messenger\Transport\Serialization\Normalizer\FlattenExceptionNormalizer->denormalize() at /api/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /api/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:508
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->validateAndDenormalize() at /api/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:543
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalizeParameter() at /api/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php:391
 Symfony\Component\Serializer\Normalizer\AbstractNormalizer->instantiateObject() at /api/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:270
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->instantiateObject() at /api/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:346
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize() at /api/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /api/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php:57
 Symfony\Component\Serializer\Normalizer\ArrayDenormalizer->denormalize() at /api/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /api/vendor/symfony/serializer/Serializer.php:144
 Symfony\Component\Serializer\Serializer->deserialize() at /api/vendor/symfony/messenger/Transport/Serialization/Serializer.php:120
 Symfony\Component\Messenger\Transport\Serialization\Serializer->decodeStamps() at /api/vendor/symfony/messenger/Transport/Serialization/Serializer.php:73
 Symfony\Component\Messenger\Transport\Serialization\Serializer->decode() at /api/vendor/symfony/amqp-messenger/Transport/AmqpReceiver.php:74
 Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceiver->getEnvelope() at /api/vendor/symfony/amqp-messenger/Transport/AmqpReceiver.php:53
 Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceiver->getFromQueues() at /api/vendor/symfony/amqp-messenger/Transport/AmqpReceiver.php:44
 Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceiver->get() at /api/vendor/symfony/messenger/Worker.php:91
 Symfony\Component\Messenger\Worker->run() at /api/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:209
 Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() at /api/vendor/symfony/console/Command/Command.php:299
 Symfony\Component\Console\Command\Command->run() at /api/vendor/symfony/console/Application.php:996
 Symfony\Component\Console\Application->doRunCommand() at /api/vendor/symfony/framework-bundle/Console/Application.php:96
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /api/vendor/symfony/console/Application.php:295
 Symfony\Component\Console\Application->doRun() at /api/vendor/symfony/framework-bundle/Console/Application.php:82
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /api/vendor/symfony/console/Application.php:167
 Symfony\Component\Console\Application->run() at /api/bin/console:50

messenger:consume [-l|--limit LIMIT] [-f|--failure-limit FAILURE-LIMIT] [-m|--memory-limit MEMORY-LIMIT] [-t|--time-limit TIME-LIMIT] [--sleep SLEEP] [-b|--bus BUS] [--queues QUEUES] [--] [<receivers>...]

Possible Solution
No idea

Additional context

@hver
Copy link

hver commented Sep 20, 2021

I have the same problem with JSON serializer, but I use Doctrine transport. I have no configuration changes for retry, using default. My json serializer is configured the same as by @B-Galati

The error happens in the function, \Symfony\Component\Messenger\Transport\Serialization\Normalizer\FlattenExceptionNormalizer::denormalize
It expects a flatten Exception object in $data parameter, but in my case it gets this array:

array:1 [
  "error" => array:2 [
    "message" => ""
    "code" => 0
  ]
]

For me it looks like the exception data structure was denormalized too many times.

Exception trace:

10:31:19 ERROR     [messenger] Error thrown while handling message XXXXX\Messages\ImportEmployeesMessage. Sending for retry #1 using 4000 ms delay. Error: "Handling "XXXXX\Messages\ImportEmployeesMessage" failed: Testing exception." ["message" => XXXXX\Messages\ImportEmployeesMessage^ { …},"class" => "XXXXX\Messages\ImportEmployeesMessage","retryCount" => 1,"delay" => 4000,"error" => "Handling "XXXXX\Messages\ImportEmployeesMessage" failed: Testing exception.","exception" => Symfony\Component\Messenger\Exception\HandlerFailedException^ { …}]
10:31:20 INFO      [php] User Deprecated: Since symfony/messenger 5.2: Using the "getExceptionMessage()" method of the "Symfony\Component\Messenger\Stamp\RedeliveryStamp" class is deprecated, use the "Symfony\Component\Messenger\Stamp\ErrorDetailsStamp" class instead. ["exception" => ErrorException { …}]
10:31:20 INFO      [php] User Deprecated: Since symfony/messenger 5.2: Using the "getFlattenException()" method of the "Symfony\Component\Messenger\Stamp\RedeliveryStamp" class is deprecated, use the "Symfony\Component\Messenger\Stamp\ErrorDetailsStamp" class instead. ["exception" => ErrorException { …}]

In FlattenExceptionNormalizer.php line 69:
                                    
  [ErrorException]                  
  Notice: Undefined index: message  
                                    

Exception trace:
  at /var/www/webapp/backend/vendor/symfony/messenger/Transport/Serialization/Normalizer/FlattenExceptionNormalizer.php:69
 Symfony\Component\Messenger\Transport\Serialization\Normalizer\FlattenExceptionNormalizer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:508
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->validateAndDenormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:543
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalizeParameter() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php:391
 Symfony\Component\Serializer\Normalizer\AbstractNormalizer->instantiateObject() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:270
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->instantiateObject() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:346
 Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php:57
 Symfony\Component\Serializer\Normalizer\ArrayDenormalizer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Serializer.php:208
 Symfony\Component\Serializer\Serializer->denormalize() at /var/www/webapp/backend/vendor/symfony/serializer/Serializer.php:144
 Symfony\Component\Serializer\Serializer->deserialize() at /var/www/webapp/backend/vendor/symfony/messenger/Transport/Serialization/Serializer.php:120
 Symfony\Component\Messenger\Transport\Serialization\Serializer->decodeStamps() at /var/www/webapp/backend/vendor/symfony/messenger/Transport/Serialization/Serializer.php:73
 Symfony\Component\Messenger\Transport\Serialization\Serializer->decode() at /var/www/webapp/backend/vendor/symfony/doctrine-messenger/Transport/DoctrineReceiver.php:160
 Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineReceiver->createEnvelopeFromData() at /var/www/webapp/backend/vendor/symfony/doctrine-messenger/Transport/DoctrineReceiver.php:70
 Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineReceiver->get() at /var/www/webapp/backend/vendor/symfony/doctrine-messenger/Transport/DoctrineTransport.php:45
 Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport->get() at /var/www/webapp/backend/vendor/symfony/messenger/Worker.php:88
 Symfony\Component\Messenger\Worker->run() at /var/www/webapp/backend/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:209
 Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() at /var/www/webapp/backend/vendor/symfony/console/Command/Command.php:299
 Symfony\Component\Console\Command\Command->run() at /var/www/webapp/backend/vendor/symfony/console/Application.php:996
 Symfony\Component\Console\Application->doRunCommand() at /var/www/webapp/backend/vendor/symfony/framework-bundle/Console/Application.php:96
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /var/www/webapp/backend/vendor/symfony/console/Application.php:295
 Symfony\Component\Console\Application->doRun() at /var/www/webapp/backend/vendor/symfony/framework-bundle/Console/Application.php:82
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/webapp/backend/vendor/symfony/console/Application.php:167
 Symfony\Component\Console\Application->run() at /var/www/webapp/backend/bin/console:51

messenger:consume [-l|--limit LIMIT] [-f|--failure-limit FAILURE-LIMIT] [-m|--memory-limit MEMORY-LIMIT] [-t|--time-limit TIME-LIMIT] [--sleep SLEEP] [-b|--bus BUS] [--queues QUEUES] [--] [<receivers>...]

@carsonbot
Copy link

Hey, thanks for your report!
There has not been a lot of activity here for a while. Is this bug still relevant? Have you managed to find a workaround?

@B-Galati
Copy link
Contributor Author

Yes please

@carsonbot carsonbot removed the Stalled label Mar 21, 2022
@fabpot
Copy link
Member

fabpot commented Jul 27, 2022

Looks like a duplicate of #33394

@carsonbot
Copy link

Hey, thanks for your report!
There has not been a lot of activity here for a while. Is this bug still relevant? Have you managed to find a workaround?

@B-Galati
Copy link
Contributor Author

B-Galati commented Mar 2, 2023

Yes please

@carsonbot carsonbot removed the Stalled label Mar 2, 2023
@carsonbot
Copy link

Hey, thanks for your report!
There has not been a lot of activity here for a while. Is this bug still relevant? Have you managed to find a workaround?

@carsonbot
Copy link

Friendly reminder that this issue exists. If I don't hear anything I'll close this.

@sebo
Copy link

sebo commented Sep 25, 2023

Still exists

@carsonbot carsonbot removed the Stalled label Sep 25, 2023
@carsonbot
Copy link

Hey, thanks for your report!
There has not been a lot of activity here for a while. Is this bug still relevant? Have you managed to find a workaround?

@carsonbot
Copy link

Hello? This issue is about to be closed if nobody replies.

@carsonbot
Copy link

Hey,

I didn't hear anything so I'm going to close it. Feel free to comment if this is still relevant, I can always reopen!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants