我需要一些有关Webhooks队列处理的建议。我正在通过Webhook从付款网关接收交易信息,在某些时候,几秒钟之内可以处理500-1000笔交易。
我最初遇到的问题是事务丢失了,我认为这是因为我正在接收它们,对其进行处理,试图将其插入数据库中,然后发送HTTP 200响应。
我现在正在考虑将有效负载直接插入数据库中,然后再进行处理。自昨晚以来,我一直在这样做,到目前为止,数据看起来不错。
但是...在这种情况下,使用Laravel的队列功能会使我受益吗?我以前没有在PHP中使用队列处理,所以无法确定这是否是一个好选择。
这是我的代码:
public function webhook(Request $request) {
$key_from_configuration = '282F8C1F40FD0BF4E9C130CB5E3CE6624B78E3AEB89FF4E4DFBF5F4360B1488B';
$iv_from_http_header = $request->header('x-initialization-vector');
$auth_tag_from_http_header = $request->header('x-authentication-tag');
$http_body = file_get_contents('php://input');
$key = hex2bin($key_from_configuration);
$iv = hex2bin($iv_from_http_header);
$auth_tag = hex2bin($auth_tag_from_http_header);
$cipher_text = hex2bin($http_body);
$result = openssl_decrypt($cipher_text, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $auth_tag);
http_response_code(200);
DB::transaction(function() use ($result) {
try {
$query = DB::connection('mysql2')->statement('INSERT INTO transactions_queue (json)
VALUES (:json)',
array('json' => $result));
}
catch(Exception $e) {
Storage::prepend('webhook_errors.txt', Carbon::now('UTC')->toDateTimeString()."\n".$e->getMessage()."\n\n");
}
});
}