hobbii / laravel-pubsub
此包已被废弃,不再维护。未建议替代包。
使用 AWS SQS 和 SNS 的 Laravel Pub/Sub
dev-main
2022-06-24 11:54 UTC
Requires
- php: ^8.0
- aws/aws-sdk-php: ^3.209
- illuminate/broadcasting: ^8.81|^9.0
- illuminate/http: ^8.81|^9.0
- illuminate/queue: ^8.81|^9.0
- illuminate/support: ^8.81|^9.0
Requires (Dev)
- fakerphp/faker: ^1.18
- friendsofphp/php-cs-fixer: ^3.8
- orchestra/testbench: ^6.24
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-03-24 15:38:55 UTC
README
一个公共 Composer 包,为 Laravel 添加使用 AWS SQS 和 SNS 的 Pub/Sub 功能
composer require hobbii/laravel-pubsub
安装
更新 config/broadcasting.php
,添加一个 pubsub
连接
<?php return [ ... 'connections' => [ ... 'pubsub' => [ 'driver' => 'pubsub', 'key' => env('AWS_SNS_KEY_ID'), 'secret' => env('AWS_SNS_ACCESS_KEY'), 'region' => env('AWS_SNS_REGION'), 'suffix' => env('AWS_SNS_TOPIC_SUFFIX'), 'prefix' => env('AWS_SNS_TOPIC_PREFIX'), ] ] ];
更新 config/queues.php
,添加一个 pubsub
连接
<?php return [ ... 'connections' => [ ... 'pubsub' => [ 'driver' => 'pubsub', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'default'), 'suffix' => env('SQS_SUFFIX'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'after_commit' => false, 'mapping' => [ ], 'delete_unmapped' => false, ], ] ];
用法
向 SNS 发布事件
要向 SNS 发布事件,必须创建一个 SnsEvent
<?php namespace App\Events; use Hobbii\PubSub\Events\AbstractSnsEvent; use Illuminate\Support\Str; class MyEvent extends AbstractSnsEvent { // Required - this type is what the subscribers will map to a job public string $type = 'my_event'; public function __construct() { // SNS Topic to broadcast the event on. parent::__construct('MyTopic'); // Group ID is required for `FIFO`-topics $this->groupId = 'my-event'; // Deduplication ID is required, // if your SNS Topic is not set up to // deduplicate messages based on content. $this->deduplicationId = Str::uuid(); // The payload/data/body of the message. $this->data = [ 'message' => 'My Event', 'payload' => [ 'Whatever payload', 'The subscribers should receive' ], ]; } }
然后,要广播事件,调用
broadcast(new MyEvent());
或者,如果你为你的事件添加了 Dispatchable
特性,你可以
MyEvent::dispatch();
从 SQS 订阅事件
创建一个继承自 Hobbii\PubSub\Jobs\AbstractSnsJob
的工作。创建的工作应该包含一个接受数组的 handle 方法,该数组将是已发布事件的负载。
<?php namespace App\Jobs; use Hobbii\PubSub\Jobs\AbstractSnsJob; class MyJob extends AbstractSnsJob { public function handle(array $data): void { // Handle the incoming payload data here. } }
在 config/queue.php
中的 connections.pubsub.mapping
下,将事件类型映射到工作
'pubsub' => [ 'driver' => 'pubsub', ... 'mapping' => [ 'my_event' => \App\Jobs\MyJob::class, ], ]
通过以下方式启动队列工作者,以便在 sqs 上监听事件
php artisan queue:work pubsub
测试
你可以在 /tests
文件夹中找到测试,你可以通过使用 ./vendor/bin/phpunit
来运行它们。
静态分析
你可以通过执行 ./vendor/bin/phpstan analyse
来运行 PHPStan
贡献
请参阅 CONTRIBUTING.md 了解如何贡献
行为准则
Hobbii/Laravel-PubSub 采用了行为准则,我们希望项目参与者遵守。请阅读全文,以便了解哪些行为是可容忍的,哪些是不可容忍的。
许可
MIT