palpalani / laravel-sqs-queue-json-reader
Laravel 定制的 SQS 队列读取器
Requires
- php: ^8.1
- aws/aws-sdk-php: ^3.250
- illuminate/bus: ^8.0|^9.0|^10.0
- illuminate/contracts: ^8.0|^9.0|^10.0
- illuminate/queue: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- laravel/pint: ^1.2
- nunomaduro/collision: ^6.3|^7.0
- nunomaduro/larastan: ^2.2
- orchestra/testbench: ^7.15|^8.0
- phpstan/extension-installer: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.0
- phpunit/phpunit: ^9.5|^10.0
- dev-main
- 0.5.1
- 0.5.0
- 0.4.0
- 0.3.0
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.30
- 0.1.29
- 0.1.28
- 0.1.27
- 0.1.26
- 0.1.25
- 0.1.24
- 0.1.23
- 0.1.22
- 0.1.21
- 0.1.20
- 0.1.19
- 0.1.18
- 0.1.17
- 0.1.16
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-develop
This package is auto-updated.
Last update: 2024-09-08 14:35:34 UTC
README
Laravel SQS 队列读取器是一个强大的扩展,旨在将外部 webhook 无缝集成到您的 Laravel 应用程序中。通过利用亚马逊简单队列服务 (SQS) 的可靠性和可伸缩性,此扩展确保您的应用程序高效地处理传入的 webhook,最小化停机时间并提高整体性能。
主要功能
轻松集成 webhook
轻松将外部 webhook 集成到您的 Laravel 应用程序中,而不会影响性能。
基于队列的处理
利用亚马逊 SQS 的力量将传入的 webhook 队列化,允许异步和并行处理,确保最佳响应时间。
可靠性和可伸缩性
SQS 提供了一个强大且可伸缩的基础设施,确保您的应用程序可以处理变化的 webhook 负载,而不会影响稳定性。
无缝 Laravel 集成
作为 Laravel 扩展设计,Webhook 队列读取器无缝集成到您的 Laravel 项目中,遵循 Laravel 的编码标准和约定。
可配置设置
自定义扩展设置,使其符合应用程序的要求,包括队列名称、可见性超时和其他 SQS 特定配置。
详细日志记录
通过详细日志记录了解 webhook 处理流程,帮助您有效地调试和监控系统。
工作原理
Webhook 注册
通过提供 webhook URL 将外部 webhook 注册到您的 Laravel 应用程序中。
SQS 队列集成
通过 SQS 队列高效处理传入的 webhook,确保最佳处理 webhook 负载。
异步处理
利用 SQS 的异步处理功能在后台处理 webhook,防止对应用程序的响应时间产生影响。
自动重试
从 SQS 的自动重试中受益,确保失败的 webhook 处理尝试在没有手动干预的情况下重试。
支持原始 JSON 负载并读取多个消息的 Laravel 项目定制的 SQS 队列读取器。Laravel 期望 SQS 消息以包含作业处理程序类和序列化作业的特定格式生成。
注意:实现了读取队列中多个消息的功能。
当您想解析来自第三方应用程序(如 Stripe webhook、Shopify webhook、Mailgun webhook、自定义 JSON 消息等)的消息时,此库非常有用。
入门指南
使用 composer 安装 Custom SQS 队列读取器 Laravel
composer require palpalani/laravel-sqs-queue-json-reader
您可以将配置文件发布,并在 Laravel 配置文件中配置您的 SQS 设置。
php artisan vendor:publish --provider="palPalani\SqsQueueReader\SqsQueueReaderServiceProvider" --tag="config"
这是发布配置文件的内容
/** * List of plain SQS queues and their corresponding handling classes */ return [ // Separate queue handler with corresponding queue name as key. 'handlers' => [ 'stripe-webhooks' => [ 'class' => App\Jobs\StripeHandler::class, 'count' => 10, ], 'mailgun-webhooks' => [ 'class' => App\Jobs\MailgunHandler::class, 'count' => 10, ] ], // If no handlers specified then default handler will be executed. 'default-handler' => [ // Name of the handler class 'class' => App\Jobs\SqsHandler::class, // Number of messages need to read from SQS. 'count' => 1, ] ];
如果队列在 'handlers' 数组中找不到,则将 SQS 负载传递到默认处理程序。
在您的 Laravel 应用程序中注册您的 webhook。
将 sqs-json 连接到您的 config/queue.php,例如
[
// Add new SQS connection
'sqs-json' => [
'driver' => 'sqs-json',
'key' => env('AWS_ACCESS_KEY_ID', ''),
'secret' => env('AWS_SECRET_ACCESS_KEY', ''),
'prefix' => env('AWS_SQS_PREFIX', 'https://sqs.us-west-2.amazonaws.com/1234567890'),
'queue' => env('AWS_SQS_QUEUE', 'external-webhooks'),
'region' => env('AWS_DEFAULT_REGION', 'us-west-2'),
],
]
在您的 .env 文件中,将 sqs-json 作为您的新默认队列驱动程序选择
QUEUE_DRIVER=sqs-json
享受无缝、可靠和可伸缩的 webhook 处理!
发送到 SQS
如果您计划从 Laravel 推送纯消息,则可以依靠 DispatcherJob
use palPalani\SqsQueueReader\Jobs\DispatcherJob; class ExampleController extends Controller { public function index() { // Dispatch job with some data. $job = new DispatcherJob([ 'music' => 'Ponni nathi from PS-1', 'singer' => 'AR. Rahman', 'time' => time() ]); // 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()); } }
上面的代码将推送以下 JSON 对象到 SQS 队列
{"job":"App\\Jobs\\SqsHandler@handle","data":{"music":"Sample SQS message","singer":"AR. Rahman","time":1464511672}}
'job' 字段实际上未使用。它只是保留与 Laravel 框架兼容。
处理作业
运行以下命令以测试已发送的作业。
php artisan queue:work sqs-json
对于生产环境,使用以下配置的supervisor。
[program:sqs-json-reader]
process_name=%(program_name)s_%(process_num)02d
command=php /var/html/app/artisan queue:work sqs-json --sleep=60 --timeout=10 --tries=2 --memory=128 --daemon
directory=/var/html/app
autostart=true
autorestart=true
startretries=10
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/html/app/horizon.log
stderr_logfile=/tmp/horizon-error.log
stopwaitsecs=3600
priority=1000
如果您正在使用多个连接,则复制上述supervisor配置并更改连接名称。
从SQS接收
如果第三方应用程序或API网关到SQS的实现正在创建自定义格式的JSON消息,只需在配置文件中添加一个处理器并在如下所示的处理类中实现处理器
use Illuminate\Contracts\Queue\Job as LaravelJob; class SqsHandlerJob extends Job { /** * @var null|array $data */ protected $data; /** * @param LaravelJob $job * @param null|array $data */ public function handle(LaravelJob $job, ?array $data): void { // This is incoming JSON payload, already decoded to an array var_dump($data); // Raw JSON payload from SQS, if necessary var_dump($job->getRawBody()); } }
注意
请确保您的Laravel应用程序配置了必要的AWS凭证和权限以与SQS交互。
使用Laravel Webhook Queue Reader增强您的Laravel应用程序的webhook处理能力。高效、可靠,专为最佳性能设计!
有关AWS SQS的更多信息,请参阅官方文档。
测试
我们已经配置了脚本,只需运行命令
composer test
对于测试覆盖率格式,运行命令
composer test-coverage
对于代码分析,运行命令
composer analyse
对于代码格式,运行命令
composer format
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
如果您想做出贡献,那么您可能想在真实的Laravel项目中测试它
- 将此存储库分支到您的GitHub账户。
- 在本地创建Laravel应用程序。
- 在Laravel应用程序的根目录中克隆您的分支。
- 在
/laravel-sqs-queue-json-reader目录中,为您的修复创建一个分支,例如feature/awesome-feature。
在您的应用程序的composer.json中安装包
{ // ... "require": { "palpalani/laravel-sqs-queue-json-reader": "*", }, "minimum-stability": "dev", "repositories": [ { "type": "path", "url": "path/to/location" } ], // ... }
现在,运行composer update。
其他Laravel包
GrumPHP rector任务 使用任务运行RectorPHP以用于您的Laravel项目。
邮件拒绝列表(黑名单)检查 - IP拒绝列表(黑名单)检查 拒绝列表(黑名单)检查器将测试邮件服务器IP地址与50多个基于DNS的电子邮件黑名单进行对比。(通常称为实时黑名单、DNSBL或RBL)。
电子邮件的Spamassassin垃圾邮件分数 使用Spamassassin数据库检查电子邮件内容的垃圾邮件分数。
Laravel登录通知 Laravel项目的登录事件通知。默认情况下,它只在生产环境中发送通知。
Laravel Toastr 为Laravel实现toastr.js。Toastr.js是一个用于非阻塞通知的JavaScript库。
Beast 使用Nodejs、Chrome和Aws Lamda的截图即服务。使用无头Chrome将网页转换为图片,截取任何给定的URL/Html内容,并返回base64编码的缓冲区。
电子商务产品推荐 分析客户订单历史记录,为新客户推荐产品,从而实现更高的销售量。
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅我们的安全策略。
鸣谢
需要帮助?
如果您发现了一个错误或有问题或功能请求,请提交一个详细的问题,并等待协助。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。