Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 22130|Răspunde: 3

[Cadru] . Reziliența .NET și gestionarea eșecurilor tranzitorii Strategia de reîncercare Polly

[Copiază linkul]
Postat pe 28.05.2019 23:54:53 | | | |
Această postare a fost editată ultima dată de Kongcida la 29-05-2019, ora 11:16

prefață
Într-un proiect, vor apărea probleme de funcționare din motive incontrolabile. De exemplu, o defecțiune a serverului, o prăbușire a serviciului, o întrerupere de rețea etc. Dacă întâmpinăm unele erori reîncercabile, putem folosi Polly —— . Biblioteci de gestionare elastică și a defectelor tranzitorii .NET. Adresa oficială a site-ului proiectului (Autentificarea cu hyperlink este vizibilă.)。 Astăzi, acest articol va documenta strategia proastă de reîncercare a lui Polly.


Mediu și Unelte


>VS 2017
>Sistemul Windows 10


Text


1: Creează o nouă aplicație pentru consolă.

2: Citez-o pe Polly. Disponibil pentru descărcare în pachetul NuGet

3: Lipește codul



4: F6 generează. Apoi găsește fișierul .exe generat în folderul de depanare – > dublu click pentru a rula.



Poți vedea mesajul de ieșire: Reîncercat de trei ori.

Când F5 depanează, poți vedea și că această metodă a fost folosită de trei ori.


Strategia de reîncercare a lui Polly este explicată în detaliu

1: Tip excepție


În acest cod, :handle conține tipul de excepție ce urmează a fi încercat din nou. Adică, atunci când codul executat produce o excepție specifică, funcția de reîncercare este executată. Altfel, nu se va efectua nicio reîncercare. Pentru că unele excepții nu necesită o reîncercare.

Desigur, putem completa aici câteva tipuri specifice de excepții pentru a încerca din nou.



DivideByZeroException aici reprezintă o excepție care încearcă să împartă la zero.
SqlException indică o excepție care apare atunci când SqlServer returnează o eroare sau un avertisment. De exemplu, eșecul conexiunii la baza de date, eroare de execuție SQL etc.
SmtpException indică o excepție ridicată de serviciul poștal. De exemplu, trimiterea a eșuat, conexiunea de rețea a eșuat, iar informațiile contului de email au fost anormale.

Pentru tipuri specifice de excepții, vă rugăm să consultați documentația oficială Microsoft:



2: Tipul de reîncercare

1) Primul tip de reîncercare este un număr direct dat de încercări. Următorul cod este reîncercat doar de 3 ori.

Putem chema acțiunile relevante efectuate la fiecare reîncercare la reîncercare. Codul următor este o altă comandă ulterioară. La efectuarea unei reîncercări, numărul de încercări și motivul excepției sunt afișate.



Putem de asemenea să reîncercăm codul până când reușește.



2) Al doilea tip de reîncercare este reîncercarea la intervale. Codul următor înseamnă să încerci din nou la fiecare 2 secunde, 7 secunde sau 10 secunde. Reîncearcă la 10 secunde. Dacă executarea nu are succes, se încheie reîncercarea.



Putem încerca din nou și la intervale până când reîncercarea are succes. Aceasta necesită calculul unei funcții.



Codul de mai sus se referă la reîncercarea puterii indirectă 2. De exemplu, dacă execuția eșuează, prima dată va fi reîncercată la intervale de 2 secunde, a doua încercare la intervale de 4 secunde, iar a treia încercare la intervale de 8 secunde......... Și așa mai departe. Până când execuția va fi reușită.



Epilog


Notă: Tipurile de excepții din codul Handle de mai sus trebuie completate în funcție de situația reală din proiectul tău. Nu toate excepțiile necesită o reîncercare.

Tipul excepției este clasa de bază pentru toate excepțiile. Este mai bine să nu umpli acest lucru în mâner, altfel va avea consecințe foarte serioase.














Precedent:. Valoarea returnării IPN-ului PayPal cu integrare a rețelei a fost întotdeauna INVALIDĂ
Următor:C# Utilizarea cuvintelor cheie de randament
Postat pe 29.05.2019 09:17:54 |
Am implementat eu însumi mecanismul de reîncercare în AOP și, în final, am descoperit că biblioteca Polly poate satisface nevoile mele, dar funcția mea a fost implementată, iar eu mă refer la o bibliotecă terță, care poate conține cod inutil, care nu poate optimiza sistemul meu, deci nu este utilă momentan.

Atașat este codul meu:



Când voi avea timp, o să mă uit și la Polly
Postat pe 29.05.2019 09:22:01 |
Xiao Zhaozha Postat la 29-05-2019 09:17
Am implementat singur mecanismul de reîncercare în AOP și, în cele din urmă, am descoperit că biblioteca Polly putea să-mi satisfacă nevoile, dar funcția mea a fost implementată, iar introducerea ...

Nu este nimic rău în a face nevoi mici ca acestea singur
Și ar trebui să aștepți data viitoare ca să încerci din nou
Postat pe 29.05.2019 09:29:22 |
Winds Postat pe 29-05-2019 09:22
Nu este nimic rău în a face nevoi mici ca acestea singur
Și ar trebui să aștepți data viitoare ca să încerci din nou?

Nu, excepția trebuie să fie cauzată de concurență, inserare de date, actualizări și conflicte de ștergere, dar trebuie să existe unul care să se execute cu succes, ....... Codul omis înfășoară tranzacția, iar excepția va fi automat anulată. La a doua încercare, conflictul a dispărut, așa că nu am setat un timp de așteptare.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com