[WIP][Messenger] Handling & Tracking Failed Messages Support #30766
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi o/!
This is a proposal to add global "failed messages" handling to Messenger. Messages are already retried a configurable number of times. But what happens if those all fail (e.g. due to a temporary network issue with an external service)? Currently, the messages are rejecting and lost. There is an event the user can hook into, but I think we can do better.
In this system, the envelopes would be "stored" somewhere for later. There would be 3 new commands you could use to handle them:
The configuration would probably look like this:
Most true messaging/queuing systems (AMQP, SQS) already have a concept of a "dead letter queue/exchange", where you can configure failed messages to go to. And this is something that we can/should document using if people are interested. However, they have few practical disadvantages. First, since these are normal queues, you can "consume" them, but you can't easily see a full list of them or look at once specific one to decide if you want to retry or remove it. Second, less robust transports like Redis & Doctrine do not have dead letter exchanges/queues built in.
Cheers!