PHP meminta API secara tidak segerak dan kembali terus selepas kegagalan
淡淡烟草味
淡淡烟草味 2017-05-16 13:13:11
0
3
437

Selepas PHP mengendalikan DB, ia akan meminta antara muka API dua perkhidmatan lain. Sekarang ada soalan, jika permintaan gagal, bagaimana untuk melancarkan DB? Kaedah selain daripada melancarkan pangkalan data

淡淡烟草味
淡淡烟草味

membalas semua(3)
Peter_Zhu

Secara terang-terang, ia adalah masalah pengaturcaraan Jika ia berdasarkan transaksi, ia boleh:

function save_if_success($transaction, $result)
{
    if ($result) $transaction->commit();
    else $transaction->rollback();
}
$db_ret = db();
save_if_success($transaction, api1($db_ret) && api2($db_ret));

Kelemahannya ialah ia hanya boleh melancarkan semula pangkalan data

Secara amnya, lebih baik untuk melaksanakan logik buat asal sendiri, yang boleh membuat asal kedua-dua operasi pangkalan data dan operasi API Sangat mudah untuk menggunakan pengecualian


function revoke_if_failed($do_func, $do_func_params, $revoke_callback, $revoke_params, $exception) {
    try
    {
        $do_func_ret = call_user_func_array($do_func, $do_func_params);
    }
    catch($exception $e)
    {
        call_user_func_array($revoke_callback, $revoke_params);
        throw;
    }
    return $do_func_ret;
}

try
{
    $dbret = db();
    $api1_ret = revoke_if_failed(api1, [$dbret], revoke_db, [$dbret], OperationFailedException::class);
    revoke_if_failed(api2, [$api1_ret], revoke_api1, [$api1_ret], OperationFailedException::class);
}
catch (OperationFailedException $e)
{
    return ERR;
}
return SUCCESS;

Boleh juga digunakan secara gabungan

淡淡烟草味

Bukankah DB sekadar pangkalan data?
Saya tidak pernah menemui soalan berkaitan, jadi saya akan mengambil kebebasan untuk menjawab:
Adakah mungkin untuk menjana tanda untuk setiap operasi dan meletakkannya dalam cache (atau pelbagai media storan Ini mempunyai tempoh sah langkah tidak dilaksanakan selepas tempoh sah, ia akan digulung semula (operasi logik)

某草草

(@ο@) Wow~, ia melibatkan masalah perkara yang diedarkan Mari kita lihat bagaimana pakar menyelesaikan pelbagai RPC

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan