Laravel SQS Queue Reader 是一个功能强大的扩展,旨在将外部 Webhooks 无缝集成到您的 Laravel 应用程序中。通过利用 Amazon Simple Queue Service (SQS) 的可靠性和可扩展性,此扩展可确保您的应用程序高效处理传入的 Webhook,从而最大限度地减少停机时间并提高整体性能。
轻松将外部 Webhook 集成到您的 Laravel 应用程序中,而不会影响性能。
利用 Amazon SQS 的强大功能对传入的 Webhook 进行排队,从而实现异步和并行处理,从而确保最佳响应时间。
SQS 提供了强大且可扩展的基础架构,确保您的应用程序可以处理不同的 Webhook 负载,而不会影响稳定性。
Webhook Queue Reader 被设计为 Laravel 扩展,遵循 Laravel 的编码标准和约定,无缝集成到您的 Laravel 项目中。
自定义扩展的设置以符合您的应用程序的要求,包括队列名称、可见性超时和其他 SQS 特定的配置。
通过详细的日志记录深入了解 Webhook 处理流程,帮助您有效地排除故障并监控系统。
通过提供 webhook URL 向您的 Laravel 应用程序注册外部 webhook。
传入的 Webhook 通过 SQS 队列进行高效处理,确保对 Webhook 负载进行最佳处理。
利用 SQS 的异步处理功能在后台处理 Webhook,防止对应用程序的响应时间产生任何影响。
受益于 SQS 的自动重试,确保在无需手动干预的情况下重试失败的 Webhook 处理尝试。
适用于 Laravel 项目的自定义 SQS 队列读取器,支持原始 JSON 有效负载并读取多条消息。 Laravel 期望以特定格式生成 SQS 消息,其中包括作业处理程序类和序列化作业。
注意:实现从队列中读取多条消息。
当您想要解析来自 3rd 方应用程序(例如 stripe webhooks、shopify webhooks、mailgun web hooks、自定义 JSON 消息等)的消息时,此库非常有用。
通过 Composer 为 Laravel 安装自定义 SQS 队列读取器:
composer require palpalani/laravel-sqs-queue-json-reader
您可以发布配置文件并在 Laravel 配置文件中配置您的 SQS 设置。
php artisan vendor:publish --provider= " palPalaniSqsQueueReaderSqsQueueReaderServiceProvider " --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 处理!
如果您打算从 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
对于production
,请使用具有以下配置的主管。
[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
如果您使用多个连接,则复制上述主管配置并更改连接名称。
如果第 3 方应用程序或 SQS 实现的 API 网关正在创建自定义格式的 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 应用程序配置了与 SQS 交互所需的 AWS 凭证和权限。
使用 Laravel Webhook 队列读取器增强 Laravel 应用程序的 Webhook 处理能力。高效、可靠,专为实现最佳性能而设计!
有关 AWS SQS 的更多信息,请查看官方文档。
我们已经配置了脚本,只需运行命令:
composer test
对于测试覆盖率格式,运行命令:
composer test-coverage
对于代码分析,运行命令:
composer analyse
对于代码格式,运行命令:
composer format
请参阅变更日志以了解有关最近更改内容的更多信息。
详细信息请参阅贡献。
如果你想做出贡献,那么你可能想在真正的 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
。
GrumPHP ector 任务 GrumPHP 具有为您的 Laravel 项目运行 RectorPHP 的任务。
电子邮件拒绝列表(黑名单)检查 - IP 拒绝列表(黑名单)检查 拒绝列表(黑名单)检查器将根据 50 多个基于 DNS 的电子邮件黑名单测试邮件服务器 IP 地址。 (通常称为实时黑名单、DNSBL 或 RBL)。
Spamassassin 电子邮件垃圾邮件分数 使用 spamassassin 数据库检查电子邮件内容的垃圾邮件分数。
Laravel 登录通知 Laravel 项目的登录事件通知。默认情况下,它只会在生产环境中发送通知。
Laravel Toastr 为 Laravel 实现了 toastr.js。 Toastr.js 是一个用于非阻塞通知的 Javascript 库。
Beast Beast 是使用 Nodejs、Chrome 和 Aws Lamda 的屏幕截图即服务。使用无头 Chrome 将网页转换为图像 截取任何给定 URL/Html 内容的屏幕截图并返回 base64 编码的缓冲区。
电商产品推荐分析客户的订单历史并向新客户推荐产品,从而实现更高的销量。
请查看我们的安全政策,了解如何报告安全漏洞。
如果您发现错误或有问题或功能请求,请提交详细问题并等待帮助。
麻省理工学院许可证 (MIT)。请参阅许可证文件以获取更多信息。