enqueue/sns
Amazon SNS transport for Enqueue/Queue Interop. Send and consume messages via AWS SNS using a standards-based PHP queue abstraction. Part of the Enqueue ecosystem with docs, CI, and Packagist distribution.
enqueue/sns package is a Queue Interop-compliant transport for Amazon SNS, enabling PHP applications to integrate with AWS SNS for pub/sub messaging. It fits well in architectures requiring event-driven communication, decoupled services, or fan-out messaging patterns (e.g., notifications, workflow orchestration).Illuminate\Queue) can leverage this package by wrapping it in a custom queue driver or using Enqueue’s Laravel bridge (enqueue/laravel). This allows seamless integration with Laravel’s job system (dispatch(), queue:work).Event::dispatch()) by pushing events to SNS for async processing.aws/aws-sdk-php (v3) for SNS interactions. Laravel already supports AWS SDK v3 via guzzlehttp/guzzle and aws/aws-sdk-php, reducing friction.Illuminate\Contracts\Queue\ShouldBeQueued serializes jobs to JSON, so this is a natural fit.| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| AWS Credential Mgmt | Requires AWS credentials (IAM roles, keys). Laravel’s env() can handle this. |
Use Laravel’s AWS facade or env('AWS_*') variables. Avoid hardcoding credentials. |
| Message Size Limits | SNS has a 256KB payload limit. Laravel jobs may exceed this if serialized. | Validate job size before dispatching or use S3 + SNS for large payloads. |
| Error Handling | SNS throttling/errors (e.g., 4xx/5xx responses) may not be fully abstracted. |
Implement retry logic in Laravel’s FailedJob handler or use Enqueue’s RetryStrategy. |
| Deprecation Risk | Last release in 2019; may lack compatibility with newer AWS SDK versions. | Test with aws/aws-sdk-php:^3.0 and monitor for forks/maintenance updates. |
| Subscription Mgmt | No built-in subscription handling (e.g., HTTP/SQS endpoints). | Use AWS CLI/SDK or Terraform to manage subscriptions separately. |
SnsQueue driver that wraps enqueue/sns.// app/Providers/QueueServiceProvider.php
public function boot()
{
Queue::extend('sns', function ($app) {
return new SnsQueue(
new SnsConnection($app['aws']->createSnsClient())
);
});
}
enqueue/laravel to integrate Enqueue’s transports directly.sns as a queue connection in .env:
QUEUE_CONNECTION=sns
Context directly for SNS publishing.use Enqueue\Sns\SnsConnectionFactory;
use Enqueue\Client\Producer;
$connection = SnsConnectionFactory::create(['region' => 'us-east-1']);
$producer = new Producer($connection);
$producer->send(new Message('Hello SNS!', ['topic' => 'my-topic']));
aws/aws-sdk-php:^3.0 is installed (Laravel 8+ uses Guzzle 6+, which aligns with SDK v3).AWS facade, configure it in config/aws.php:
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeQueued;
class SendNotification implements ShouldBeQueued
{
use Queueable;
public function handle()
{
// Published via SNS (not Laravel's queue)
app('sns')->publish('user.created', ['user_id' => 123]);
}
}
SnsQueue driver or use enqueue/laravel.QUEUE_CONNECTION=sns in .env.failed_jobs table.| Component | Compatibility Notes |
|---|---|
| Laravel Version | Tested with Laravel 5.5+ (PHP 7.2+). |
| PHP Version | Requires PHP 7.2+ (due to AWS SDK v3 and Enqueue dependencies). |
| AWS SDK | Officially supports aws/aws-sdk-php:^3.0. |
| Enqueue | Requires enqueue/enqueue:^0.17.0. |
| Message Protocols | Supports JSON (default) and raw payloads. |
| Laravel Jobs | Works with ShouldBeQueued jobs if serialized to JSON (<256KB). |
env or IAM roles).composer require enqueue/sns).enqueue/laravel.QUEUE_CONNECTION in .env.NumberOfMessagesPublished).enqueue/sns for forks or maintenance (last release in 2019).aws/aws-sdk-php to a stable version to avoid breaking changes.How can I help you explore Laravel packages today?