Package Data | |
---|---|
Maintainer Username: | jayhof |
Maintainer Contact: | johannes.hofmann@joblocal.de (Johannes Hofmann) |
Package Create Date: | 2016-08-26 |
Package Last Update: | 2024-06-21 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-14 15:03:50 |
Package Statistics | |
---|---|
Total Downloads: | 338,617 |
Monthly Downloads: | 5,498 |
Daily Downloads: | 271 |
Total Stars: | 48 |
Total Watchers: | 5 |
Total Forks: | 35 |
Total Open Issues: | 2 |
A simple extension to the Illuminate/Queue queue system used in Laravel and Lumen.
Using this connector allows SQS messages originating from a SNS subscription to be worked on with Illuminate\Queue\Jobs\SqsJob.
This is especially useful in a miroservice architecture where multiple services subscribe to a common topic with their queues.
Understand that this package will not handle publishing to SNS, please use the AWS SDK to publish an event to SNS.
Add the LaravelSqsSnsSubscriptionQueue ServiceProvider to your application.
Registering Service Providers in Laravel
'providers' => [
// ...
Joblocal\LaravelSqsSnsSubscriptionQueue\SqsSnsServiceProvider::class,
],
Registering Service Providers in Lumen
$app->register(Joblocal\LaravelSqsSnsSubscriptionQueue\SqsSnsServiceProvider::class);
You'll need to configure the queue connection in your config/queue.php
'connections' => [
'sqs-sns' => [
'driver' => 'sqs-sns',
'key' => env('AWS_ACCESS_KEY', 'your-public-key'),
'secret' => env('AWS_SECRET_ACCESS_KEY', 'your-secret-key'),
'queue' => env('QUEUE_URL', 'your-queue-url'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'routes' => [
// you can use the "Subject" field
'Subject' => 'App\\Jobs\\YourJob',
// or the "TopicArn" of your SQS message
'TopicArn:123' => 'App\\Jobs\\YourJob',
// to specify which job class should handle the job
],
],
],
Once the sqs-sns queue connector is configured you can start using it by setting queue driver to 'sqs-sns' in your .env file.
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
/**
* Example Job class
*/
class Job implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* @param string $subject SNS Subject
* @param array $payload JSON decoded 'Message'
*/
public function __construct(string $subject, array $payload)
{
}
}
When SNS publishes to SQS queues the received message signature is as follows:
{
"Type" : "Notification",
"MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "Testing publish to subscribed queues",
"Message" : "Hello world!",
"Timestamp" : "2017-03-29T05:12:16.901Z",
"SignatureVersion" : "1",
"Signature" : "...",
"SigningCertURL" : "...",
"UnsubscribeURL" : "..."
}
Illuminate\Queue\Jobs\SqsJob requires the following signature:
{
"job": "Illuminate\\Queue\\CallQueuedHandler@call",
"data": {
"commandName": "App\\Jobs\\YourJob",
"command": "...",
}
}
The best way to install laravel-sqs-sns-subscription is by using Composer.
To install the most recent version:
php composer.phar require joblocal/laravel-sqs-sns-subscription-queue