Laravel Queues for Webhooks - PullRequest
       6

Laravel Queues for Webhooks

0 голосов
/ 15 июня 2019

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