Forked from https://github.com/joblocal/laravel-sqs-sns-subscription-queue for compatability with Laravel 5.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.
- Laravel (tested with version 5.2)
- or Lumen (tested with version 5.2)
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
AWS config found in config/aws.php will be automatically merged in.
'connections' => [
'sqs-sns-connection' => [
'driver' => 'sqs-sns',
'queue' => env('QUEUE_URL', 'your-queue-url'),
'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 running php artisan queue:listen sqs-sns-connection
Note that the body of SNS messages must be valid JSON for this queue processor to work.
namespace App\Jobs;
use Joblocal\LaravelSqsSnsSubscriptionQueue\BaseJob;
class YourJob extends BaseJob
{
public function handle()
{
// handle queue item
var_dump($this->subject, $this->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" : "..."
}