Maison > Questions et réponses > le corps du texte
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
天蓬老师2017-05-16 13:15:11
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
淡淡烟草味2017-05-16 13:15:11
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)
某草草2017-05-16 13:15:11
(@ο@) Wow~, cela implique un problème de choses distribuées. Voyons comment les maîtres résolvent plusieurs RPC
.