zackijack / laravel-sqs-sns
A simple Laravel service provider which adds a new queue connector to handle SNS subscription queues.
Installs: 197
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 35
pkg:composer/zackijack/laravel-sqs-sns
Requires
- php: >=5.6.4
 - aws/aws-sdk-php: ^3.36
 - illuminate/queue: ^5.5
 - illuminate/support: ^5.5
 
Requires (Dev)
- fiunchinho/phpunit-randomizer: ^3.0
 - orchestra/testbench: ^3.4
 - phpunit/phpunit: ^6.2
 - squizlabs/php_codesniffer: ^3.0
 
This package is auto-updated.
Last update: 2025-10-13 22:07:22 UTC
README
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.
Requirements
- Laravel (tested with version 5.3)
 - or Lumen (tested with version 5.3)
 
Usage
Add the LaravelSqsSnsSubscriptionQueue ServiceProvider to your application.
Laravel
Registering Service Providers in Laravel
'providers' => [ // ... Joblocal\LaravelSqsSnsSubscriptionQueue\SqsSnsServiceProvider::class, ],
Lumen
Registering Service Providers in Lumen
$app->register(Joblocal\LaravelSqsSnsSubscriptionQueue\SqsSnsServiceProvider::class);
Configuration
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.
Job class example
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) { } }
Message transformation
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": "...",
  }
}
Installation
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