ecomailcz / laravel-plain-sqs
Laravel 的 SQS 连接器,支持自定义 JSON 格式
Requires
- php: >=5.5.0
- aws/aws-sdk-php: ~3.0
- illuminate/bus: 5.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/queue: 5.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: 5.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10|^10.0
This package is auto-updated.
Last update: 2024-09-10 11:53:29 UTC
README
一个用于 Laravel (或 Lumen) 的自定义 SQS 连接器,支持自定义格式的 JSON 负载。默认情况下,Laravel 预期 SQS 消息以特定格式生成 - 包含作业处理类和序列化作业的格式。
但在某些情况下,您可能希望解析来自第三方应用程序、自定义 JSON 消息等情况的消息。
依赖关系
- PHP >= 5.5
- Laravel (或 Lumen) >= 5.2
通过 Composer 安装
要安装,只需运行
composer require dusterio/laravel-plain-sqs
或手动将其添加到 composer.json
{ "require": { "dusterio/laravel-plain-sqs": "~0.1" } }
Laravel 5 中的用法
// Add in your config/app.php 'providers' => [ '...', 'Dusterio\PlainSqs\Integrations\LaravelServiceProvider', ];
Lumen 5 中的用法
// Add in your bootstrap/app.php $app->loadComponent('queue', 'Dusterio\PlainSqs\Integrations\LumenServiceProvider');
配置
// Generate standard config file (Laravel only) php artisan vendor:publish // In Lumen, create it manually (see example below) and load it in bootstrap/app.php $app->configure('sqs-plain');
编辑 config/sqs-plain.php 以满足您的需求。此配置将 SQS 队列与处理类相匹配。
return [ 'handlers' => [ 'base-integrations-updates' => App\Jobs\HandlerJob::class, ], 'default-handler' => App\Jobs\HandlerJob::class ];
如果队列在 'handlers' 数组中未找到,则将 SQS 负载传递给默认处理程序。
将 sqs-plain 连接添加到您的 config/queue.php 中,例如
... 'sqs-plain' => [ 'driver' => 'sqs-plain', 'key' => env('AWS_KEY', ''), 'secret' => env('AWS_SECRET', ''), 'prefix' => 'https://sqs.ap-southeast-2.amazonaws.com/123123/', 'queue' => 'important-music-updates', 'region' => 'ap-southeast-2', ], ...
在您的 .env 文件中,选择 sqs-plain 作为您的新默认队列驱动程序
QUEUE_DRIVER=sqs-plain
向 SQS 发送消息
如果您计划从 Laravel 或 Lumen 推送纯消息,则可以依靠 DispatcherJob
use Dusterio\PlainSqs\Jobs\DispatcherJob; class ExampleController extends Controller { public function index() { // Create a PHP object $object = [ 'music' => 'M.I.A. - Bad girls', 'time' => time() ]; // Pass it to dispatcher job $job = new DispatcherJob($object); // Dispatch the job as you normally would // By default, your data will be encapsulated in 'data' and 'job' field will be added $this->dispatch($job); // If you wish to submit a true plain JSON, add setPlain() $this->dispatch($job->setPlain()); } }
这将向 SQS 推送以下 JSON 对象
{"job":"App\\Jobs\\HandlerJob@handle","data":{"music":"M.I.A. - Bad girls","time":1462511642}}
'job' 字段实际上没有使用。它只是保留以兼容性为目的。
从 SQS 接收消息
如果第三方应用程序正在创建自定义格式的 JSON 消息,只需在配置文件中添加一个处理程序,并实现以下处理程序类
use Illuminate\Contracts\Queue\Job as LaravelJob; class HandlerJob extends Job { protected $data; /** * @param LaravelJob $job * @param array $data */ public function handle(LaravelJob $job, array $data) { // This is incoming JSON payload, already decoded to an array var_dump($data); // Raw JSON payload from SQS, if necessary var_dump($job->getRawBody()); } }
待办事项
- 添加更多单元和集成测试
视频教程
我刚刚开始了一个教育 YouTube 频道,该频道将涵盖软件开发和 DevOps 的顶级 IT 趋势:config.sys
许可
MIT 许可证 (MIT) 版权所有 (c) 2016 Denis Mysenko
特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人进行上述行为,但需遵守以下条件
上述版权声明和本许可声明应包含在软件的副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任基于合同、侵权或其他原因,无论此类责任源于、因之产生或与之有关软件或软件的使用或其他方式。