PHP demande l'API de manière asynchrone et revient en arrière directement après un échec
淡淡烟草味
淡淡烟草味 2017-05-16 13:13:11
0
3
434

Une fois que PHP a exploité la base de données, il demandera les interfaces API de deux autres services. Il y a maintenant une question : si la requête échoue, comment restaurer la base de données ? Méthodes autres que la restauration de la base de données

淡淡烟草味
淡淡烟草味

répondre à tous(3)
Peter_Zhu

Pour parler franchement, il s'agit d'un problème de programmation. S'il est basé sur des transactions, cela peut être :

.
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));

L'inconvénient est qu'il ne peut restaurer que la base de données

Il est généralement préférable d'implémenter vous-même la logique d'annulation, qui peut annuler à la fois les opérations de base de données et les opérations de l'API. Il est très pratique d'utiliser des exceptions

.

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;

Peut également être utilisé en combinaison

淡淡烟草味

La base de données n'est-elle pas simplement une base de données ?
Je n'ai jamais rencontré de questions connexes, je me permettrai donc de répondre :
Est-il possible de générer une note pour chaque opération et de la mettre dans le cache (ou divers supports de stockage) Celui-ci a une durée de validité si la suivante. l'étape n'est pas exécutée après la période de validité, elle sera annulée (opération logique)

.
某草草

(@ο@) Wow~, cela implique un problème de choses distribuées. Voyons comment les maîtres résolvent plusieurs RPC

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal