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)。請參閱許可證文件以獲取更多資訊。