[9.x] Passing event into viaQueue
and viaConnection
of Queued Listener
#44080
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.
Proposal this (if got approved & merged, I'll submit a doc PR)
For our project, we have a lot of Queued Listeners. At the moment, for some critical endpoints (that need to respond as fast as they can), we need to push it to a
redis
connection instead ofsqs
based on the events's data (which is impossible at the moment)At my first try (which didn't work), I used the
shouldQueue($event)
to set the$connection
dynamically.After spending a bit of time reading the logic. I see that before Laravel invoking the
shouldQueue
, it will create a new concrete listener class to and use it to check.And before the queue push happen, Laravel create another new concrete listener class via Reflector. Thus my
$connection
will never be there.https://github.com/laravel/framework/blob/9.x/src/Illuminate/Events/Dispatcher.php#L560
With this patch, we would be able to do something like this:
Code & unit testing added, no breaking changes!