ralbear / laravel-events-to-sns
Laravel 包,用于将事件推送到 AWS SNS
1.0.2
2021-02-13 13:08 UTC
Requires
- php: >=7.2
- ext-json: *
- aws/aws-sdk-php-laravel: ^3.6
- illuminate/support: ^5.6|^6.0|^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ~3.8|^4.0|^5.0|^6.0
This package is auto-updated.
Last update: 2024-09-13 20:36:15 UTC
README
Laravel 事件到 SNS
此库允许我们将 Laravel 事件发送到 SNS 主题,并通过 SQS 队列接收。
安装
$ composer require ralbear/laravel-events-to-sns
将提供者添加到 config/app.php
'providers' => [
Ralbear\EventsToSns\EventsToSnsProvider::class
]
配置
第一步是在 config/queue.php 中创建新的连接配置
'connections' => [
'sqs-sns' => [
'driver' => 'sqs-sns',
'key' => env('SQS_SNS_ACCESS_KEY_ID') ?? env('AWS_ACCESS_KEY_ID') ?? '',
'secret' => env('SQS_SNS_SECRET_ACCESS_KEY') ?? env('AWS_SECRET_ACCESS_KEY') ?? '',
'region' => env('SQS_SNS_DEFAULT_REGION') ?? env('AWS_DEFAULT_REGION') ?? '',
'base_ARN' => env('SQS_SNS_BASE_ARN') ?? '',
'valid_topics' => explode(',',env('SQS_SNS_VALID_TOPICS')) ?? [],
'prefix' => env('SQS_SNS_PREFIX') ?? env('SQS_PREFIX') ?? '',
'queue' => env('SQS_SNS_QUEUE') ?? env('SQS_QUEUE') ?? '',
'env_postfix' => env('SQS_SNS_ENV') ?? env('APP_ENV') ?? '',
'event_class_postfix' => 'Event'
],
]
AWS 凭据
如果我们使用与 SNS 相同的 AWS 账户来处理应用中的其他 AWS 服务,我们可以使用默认的 env 键来获取凭据。
AWS_ACCESS_KEY_ID=<MAIN ACCESS KEY ID>
AWS_SECRET_ACCESS_KEY=<SECRECT ACCESS KEY>
AWS_DEFAULT_REGION=us-west-1
如果我们需要为 SNS 特定凭据,使用以下 env 键
SQS_SNS_ACCESS_KEY_ID=<SNS ACCESS KEY ID>
SQS_SNS_SECRET_ACCESS_KEY=<SNS SECRET ACCESS KEY>
SQS_SNS_DEFAULT_REGION=eu-west-1
主题
根据设计,此库基于三个部分定义 SNS 主题。
- A: 使用环境变量
SQS_SNS_BASE_ARN=arn:aws:sns:eu-west-1:123456789
- B: 在您的事件中定义
public function getTopic() { return 'service-a-topic'; }
我们使用的事件级别主题,应在此环境变量中以逗号分隔的值定义
SQS_SNS_VALID_TOPICS=service-a-topic,service-b-topic
- D: 如果需要不同于
APP_ENV的值,使用环境变量
SQS_SNS_ENV=local
SQS_SNS_ENV 允许我们为每个环境自定义主题,例如,如果我们为测试特定功能生成新的环境,我们可以在其中设置功能名称。
示例
事件示例
<?php namespace App\Events; use App\Models\Order; use Ralbear\EventsToSns\Contracts\ShouldBeInSns; use Ralbear\EventsToSns\Traits\SendToSns; class OrderCreatedEvent implements ShouldBeInSns { use SendToSns; public $order; public function __construct(Order $order) { $this->order = $order; } public function uniqueId() { return $this->order->id; } public function getTopic() { return 'service-a-topic'; } }
运行工作进程
运行工作进程
$ php artisan queue:worker sqs-sns
作业示例
<?php namespace App\Jobs; use Illuminate\Queue\Jobs\SqsJob; class OrderCreatedJob { public function handle(SqsJob $job, $data) { //Do something nice with your $data $job->delete(); } }
测试
运行测试
$ composer test
待办事项
- 改进测试和覆盖率
许可证
Laravel 事件到 SNS 是开源软件,许可协议为 MIT 许可证。

