Sari la conținut

Exemplu de inginerie

Un flux mic. Decizii explicite.

Urmărește o cerere sintetică de reaprovizionare, de la validare la rezultatul unei livrări simulate. Rulează aceeași implementare aici sau cu Node.js, apoi verifică deciziile în cod și teste.

Exemplu sintetic · nu provine dintr-un proiect pentru client

Validarea, starea din memoria procesului și bucla de reîncercare se execută local. Sistemul destinatar și răspunsurile sale sunt simulate. Exemplul nu reprezintă dovezi despre un proiect pentru client sau un rezultat în producție.

O cerere, mai multe situații de eroare utile

Un sistem operațional fictiv solicită patru unități SKU-ALPHA pentru contul SYN-001. Adaptorul sistemului destinatar returnează un răspuns de acceptare, o eroare temporară sau una permanentă. Nicio cerere nu părăsește pagina sau procesul local Node.js.

  1. Validează contractul

    Verifică cele patru câmpuri obligatorii și valorile permise înainte de a rezerva un ID sau de a apela funcția de trimitere.

  2. Rezervă ID-ul cererii

    Păstrează amprenta conținutului în această instanță a fluxului. Suprimă repetarea identică; respinge un conținut diferit sub același ID.

  3. Clasifică și oprește explicit

    Reîncearcă numai după un răspuns clasificat drept temporar. Înregistrează fiecare încercare, așteptarea programată și rezultatul final.

Rulează un scenariu sintetic

Fiecare rulare pornește cu memorie nouă. Scenariile de duplicare și conflict trimit două înregistrări în acea rulare. Livrarea este simulată; nu se trimite nimic.

Date sintetice de intrare

[
  {
    "requestId": "DEMO-1001",
    "account": "SYN-001",
    "item": "SKU-ALPHA",
    "quantity": 4
  }
]

Rezultat local observat

Alege și rulează un scenariu pentru a inspecta evenimentele.

Decizii pe care le poți citi și testa

Contractul exemplului rămâne restrâns, astfel încât comportamentul să poată fi inspectat fără un serviciu, credențiale sau instalarea unui pachet.

Contractul de intrare

Exact requestId, account, item și quantity. ID-urile folosesc prefixele DEMO- și SYN-; articolul este SKU-ALPHA sau SKU-BETA. Cantitatea trebuie să fie un număr întreg între 1 și 100. Câmpurile suplimentare și conversia implicită a tipurilor sunt respinse.

Duplicate și conflicte

ID-ul cererii identifică un singur conținut într-o instanță a fluxului. Repetarea unei cereri încheiate raportează starea anterioară fără retrimitere. Repetarea unei cereri în curs este suprimată. Modificarea conținutului returnează un conflict.

Politica de reîncercare

Cel mult trei încercări. Răspunsurile temporare duc la așteptări de 250ms, apoi 500ms. Un răspuns permanent oprește imediat fluxul. O excepție sau un răspuns necunoscut oprește fluxul ca eroare neclasificată, fără reîncercare automată.

Rezultate observabile

Rezultatele conțin o stare, numărul încercărilor și coduri de eveniment ordonate. Cererile respinse, cele cu reîncercări epuizate și erorile neclasificate rămân rezervate în memorie; repetarea aceleiași cereri nu repornește livrarea în mod implicit.

Descarcă. Rulează. Citește verificările.

Folosește Node.js 22 sau o versiune ulterioară. Salvează cele cinci fișiere de mai jos în același dosar, păstrând numele. README explică simularea și comenzile. Nu este necesar npm install. Panoul, interfața CLI și verificările importă aceeași implementare workflow.mjs.

node workflow-cli.mjs retry
node workflow-cli.mjs all

Rulează verificările

node --test workflow-checks.mjs

Ce rămâne de stabilit într-un proiect real

  1. Starea există într-o singură instanță JavaScript a fluxului. Resetarea, reîncărcarea sau un proces nou o pierd. Instanțele separate nu se coordonează. Nu există stocare durabilă, blocare între procese sau curățare automată.
  2. Funcția de trimitere returnează răspunsuri simulate fixe. Nu există API extern, autentificare, coadă persistentă, confirmare reală de livrare sau tratarea unui efect extern incert. Exemplul nu garantează livrarea exact o singură dată.
  3. O integrare reală necesită responsabilități agreate, identitate durabilă și reguli de păstrare, comportament concurent, limite de timp, reconciliere, monitorizare și proceduri de recuperare. Alegerile depind de sistemul destinatar și de scopul proiectului.
  4. Datele sunt sintetice, iar controalele nu acceptă date personale sau de afaceri. Acest exemplu educațional nu înlocuiește dovezile despre clienți cu permisiune de publicare și nu demonstrează rezultate de securitate, conformitate sau performanță.

De la exemplu la proiect

Ce flux are nevoie de un contract mai clar?

Discuția despre proiect poate începe cu sistemele implicate, contractul cererii, situațiile de eroare și persoanele responsabile de recuperare.