Laravel Webhooks队列

时间:2019-06-15 11:44:38

标签: php laravel queue

我需要一些有关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");
        }
    });
}

0 个答案:

没有答案