Мне нужен совет относительно обработки очередей, когда дело доходит до веб-хуков. Я получаю информацию о транзакции через веб-крючок от платежного шлюза, и в определенные моменты времени в течение нескольких секунд может быть обработано от 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");
}
});
}