edriving-limited / dynamic-sqs
Adds support for custom SQS payloads in Laravel
Installs: 9 424
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 0
Forks: 1
Open Issues: 0
Requires
- php: ^7.3|^7.4|^8.0|^8.1|^8.2|^8.3
- aws/aws-sdk-php: ^3.269
- illuminate/contracts: ^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- nunomaduro/larastan: ^1.0
- orchestra/testbench: ^5.0|^6.0|^7.0|^8.0
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: *
This package is auto-updated.
Last update: 2024-05-24 14:17:56 UTC
README
This package adds support for custom SQS payloads with your standard Laravel jobs.
Installation
First install the package using composer composer require edriving-limited/dynamic-sqs
. Then
publish the
configuration files using php artisan vendor:publish
.
You will also need to update the driver
for your SQS connection to dynamic-sqs
.
Setup
First, you should create your job class, the exact same way you would your standard Laravel jobs. Then, we need to create a "handler" class, this class is responsible for taking the payload from your SQS message and returning an instance of your job class.
This class should implement the JobHandlerContract
and define a handle
method, which returns a
job instance.
use App\Jobs\SendWelcomeEmail; use eDriving\DynamicSqs\JobHandlerContract; use Illuminate\Contracts\Queue\ShouldQueue; class SendWelcomeEmailHandler implements JobHandlerContract { public function handle(array $payload): ShouldQueue { return SendWelcomeEmail($payload['data']['userId']); } }
With your handler class set up, we then need to define how to map any given SQS message, to a
particular handler. To
do this, open your newly published config/dynamic-sqs.php
config file. In here, there are two
properties we need to
define, discoverer
and map
.
Discoverer
This property should reference a class, which is responsible for taking a given payload, and returning the "handler id". This ID is a value in your payload which will be used determine which handler to use for this message. One is set up for you already, which returns the "handler" value from the payload. You're free to create your own version of this class to suit your messages.
[ 'discoverer' => [\eDriving\DynamicSqs\Commands\DiscovererHandler::class, 'discover'], ]
Map
Finally, we need to map the handler ID's, to their handler classes. You do this by populating
the map
property with
key => value pairs. The key being the handler ID, and the map being the class-string of the
handler class.
[ 'map' => [ 'sendWelcomeEmail' => SendWelcomeEmailHandler::class ] ]