Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) · leksjon

Håndtering av kompensasjon med hendelser

Implementer kompensasjonshandlinger i en koreografert Saga ved å publisere bestemte tilbakerullingshendelser som reverserer tidligere handlinger.

Leksjon 3 av 411 trinn

Håndtering av kompensasjon med hendelser er en gratis leksjon i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.

Hvorfor kompensasjon er avgjørende

I koreograferte sagaer reagerer tjenester på hendelser. Men hva skjer når en av tjenestene ikke klarer å fullføre sin del av en distribuert transaksjon?

Vi trenger en måte å oppheve handlinger som tidligere tjenester har utført. Det er her kompensasjon kommer inn.

Hva er kompensasjon?

Kompensasjon er prosessen med å reversere tidligere fullførte operasjoner i en distribuert transaksjon. Se på det som en «rollback»-mekanisme tilpasset mikrotjenester.

Den sikrer at systemet kan gå tilbake til en konsistent tilstand hvis et trinn i en forretningsprosess med flere tjenester mislykkes.

Kompensasjon i koreografi

I en koreografert saga finnes det ingen sentral orkestrator. Tjenestene kommuniserer direkte via hendelser. Så hvordan utløser vi kompensasjon?

  • Når en tjeneste ikke klarer å fullføre oppgaven sin, publiserer den en bestemt kompensasjonshendelse.
  • Andre tjenester som har fullført sin del, lytter etter disse kompensasjonshendelsene.
  • Når de mottar en kompensasjonshendelse, utfører de sin egen tilbakerullingslogikk.

Utforme kompensasjonshendelser

Kompensasjonshendelser må inneholde nok informasjon til at tjenester kan utføre tilbakerullingen. Viktige detaljer omfatter ofte:

  • Den opprinnelige saga-ID-en eller transaksjons-ID-en.
  • Detaljer om den opprinnelige handlingen som må reverseres.
  • Data som kreves for å utføre reverseringen (for eksempel beløpet som skal refunderes eller varen som skal frigjøres).

Eksempel: Saga for ordrebehandling

Se for deg en prosess for nettbestillinger:

  1. Order Service: Oppretter ordren (publiserer OrderCreated)
  2. Payment Service: Behandler betalingen (publiserer PaymentProcessed)
  3. Inventory Service: Reserverer lagerbeholdning (publiserer InventoryReserved)

Hva skjer hvis Inventory Service ikke klarer å reservere lagerbeholdningen?

Starte tilbakerullingen

Hvis Inventory Service ikke klarer å reservere lagerbeholdningen, bør den:

  • Ikke publisere InventoryReserved.
  • I stedet publisere en kompensasjonshendelse, for eksempel InventoryReservationFailed.

Denne hendelsen signaliserer til andre tjenester at sagaen ikke kunne fullføres, og at de må oppheve handlingene sine.

Payment Service sin kompensasjon

Payment Service abonnerer på hendelser som indikerer feil. Når tjenesten mottar InventoryReservationFailed, vet den at den må handle:

  • Den starter en refusjon for betalingen som tidligere ble behandlet.
  • Etter refusjonen kan den publisere en ny hendelse, for eksempel PaymentRefunded, for å informere andre interesserte tjenester.

Order Service sin kompensasjon

Order Service, som opprettet den opprinnelige ordren, må også reagere. Den kan lytte etter InventoryReservationFailed eller PaymentRefunded.

  • Når Order Service mottar en slik hendelse, oppdaterer den ordrestatusen til «Cancelled» eller «Failed».
  • Dette sikrer at brukeren ser riktig status for ordren.

Implementere kompensasjonslogikk

Hver tjeneste må inneholde logikk for å håndtere både hendelser som fører prosessen fremover, og bestemte kompensasjonshendelser. Dette innebærer ofte separate hendelsesbehandlere for hver av dem.

Her er et forenklet eksempel på hvordan en Payment Service kan lytte etter en kompensasjonshendelse og utløse en refusjon:

public class PaymentService {

  public static void main(String[] args) {
    System.out.println("Payment Service Started.");
    // Simulate receiving an event from a message broker
    String receivedEvent = "InventoryReservationFailed: Order123";

    if (receivedEvent.startsWith("InventoryReservationFailed")) {
      String orderId = receivedEvent.split(":")[1];
      System.out.println("Received compensation event: " + receivedEvent);
      System.out.println("Initiating refund for Order ID: " + orderId + "...");
      
      // In a real system, call a payment gateway API to refund
      boolean refundSuccess = processRefund(orderId);
      
      if (refundSuccess) {
        System.out.println("Refund processed successfully for " + orderId + ".");
        // Publish 'PaymentRefunded' event for other services
        System.out.println("Publishing PaymentRefunded event.");
      } else {
        System.out.println("Refund failed for " + orderId + ".");
        // Handle refund failure (e.g., alert, manual intervention)
      }
    } else {
      System.out.println("No compensation event received yet.");
    }
    System.out.println("Payment Service Shutting Down.");
  }

  private static boolean processRefund(String orderId) {
    // Simulate external refund API call
    return true; // Assume success for this example
  }
}

Kort kontroll: Formålet med kompensasjon

I en koreografert saga, hvis «Inventory Service» ikke klarer å reservere varer etter at «Payment Service» har behandlet en betaling, hva er hovedformålet med at «Inventory Service» publiserer en InventoryReservationFailed-hendelse?

Oppsummering: Håndtere kompensasjon

Du har lært hvor viktig kompensasjon er i koreograferte sagaer for å opprettholde datakonsistens i distribuerte systemer. Viktige punkter:

  • Kompensasjon reverserer vellykkede handlinger når et sagatrinn mislykkes.
  • I koreografi publiserer tjenester bestemte kompensasjonshendelser for å starte tilbakerullinger.
  • Hver tjeneste må implementere logikk for å lytte etter og reagere på disse hendelsene ved å utføre sine egne opphevingsoperasjoner.
  • Tydelig utforming av hendelser og robust håndtering er avgjørende for motstandsdyktige sagaer.
Gratis å komme i gang

Lær deg Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Håndtering av kompensasjon med hendelser» gratis?

Ja – hele teksten i «Håndtering av kompensasjon med hendelser» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.

Hva lærer jeg i «Håndtering av kompensasjon med hendelser»?

Implementer kompensasjonshandlinger i en koreografert Saga ved å publisere bestemte tilbakerullingshendelser som reverserer tidligere handlinger. Du øver på Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)?

Ingen tidligere erfaring er nødvendig. Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Håndtering av kompensasjon med hendelser»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-leksjonen?

Ja. Alle Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Utforming av hendelsesdrevne Sagaer
  2. Hendelsesbuss og meldingsbrokere
  3. Håndtering av kompensasjon med hendelser
  4. Bygging av idempotente hendelseskonsumenter
← Tilbake til Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)