Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) · Lektion

Choreography Saga förklarad

Förstå choreography-metoden, där tjänster kommunicerar direkt via händelser utan en central samordnare.

Lektion 2 av 412 steg

Choreography Saga förklarad är en gratis lektion i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker), och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) innehåller totalt 4 lektioner.

Introduktion till Choreography Saga

Välkomna! I den här lektionen utforskar vi mönstret Choreography Saga. Det är ett sätt att hantera komplexa affärstransaktioner som sträcker sig över flera tjänster på ett decentraliserat sätt.

Till skillnad från en orkester med en dirigent liknar choreography en dans där varje dansare känner till sin del och reagerar på de andras rörelser.

Decentraliserat händelseflöde

I en choreography-Saga finns ingen central samordningstjänst. I stället publicerar varje tjänst som deltar i transaktionen händelser och lyssnar efter händelser från andra tjänster.

  • Tjänster reagerar på händelser.
  • De utför sin del av transaktionen.
  • De publicerar nya händelser för att utlösa nästa steg.

Exempel på orderhantering

Vi använder ett vanligt exempel: att behandla en kundorder. Det omfattar flera steg i olika tjänster:

  • Order Service: Skapar ordern.
  • Payment Service: Hanterar betalningen.
  • Inventory Service: Uppdaterar lagersaldot.

Hur samordnar dessa tjänster sig utan en central hjärna?

Steg 1: Händelsen Order Created

När en kund lägger en order startar Order Service Sagan. Tjänsten sparar ordern och publicerar sedan en OrderCreatedEvent.

Den här händelsen signalerar till andra tjänster att en ny order är klar att behandlas.

public class OrderService {
  public static void processNewOrder(String orderId) {
    System.out.println("Order Service: Received new order " + orderId);
    System.out.println("Order Service: Saving order " + orderId + " to database...");
    // Imagine database interaction here
    System.out.println("Order Service: Order " + orderId + " saved.");
    System.out.println("Order Service: Publishing 'OrderCreatedEvent' for " + orderId);
  }

  public static void main(String[] args) {
    processNewOrder("ORD789"); // Simulate a new order coming in
  }
}

Steg 2: Payment Service reagerar

Payment Service prenumererar på OrderCreatedEvent. När tjänsten tar emot en sådan händelse behandlar den betalningen för ordern.

Efter behandlingen publicerar den antingen en PaymentProcessedEvent eller en PaymentFailedEvent.

public class PaymentService {
  public static void handleOrderCreated(String orderId) {
    System.out.println("Payment Service: Received 'OrderCreatedEvent' for order " + orderId);
    System.out.println("Payment Service: Processing payment for " + orderId + "...");
    // Simulate payment gateway interaction
    boolean paymentSuccess = true; // For this example, assume success
    if (paymentSuccess) {
      System.out.println("Payment Service: Payment successful for " + orderId + ".");
      System.out.println("Payment Service: Publishing 'PaymentProcessedEvent' for " + orderId);
    } else {
      System.out.println("Payment Service: Payment failed for " + orderId + ".");
      System.out.println("Payment Service: Publishing 'PaymentFailedEvent' for " + orderId);
    }
  }

  public static void main(String[] args) {
    handleOrderCreated("ORD789"); // Simulate receiving an event
  }
}

Steg 3: Inventory Service uppdaterar lagret

Därefter lyssnar Inventory Service efter PaymentProcessedEvent. När tjänsten tar emot en sådan händelse minskar den lagersaldot för de beställda artiklarna.

Den publicerar sedan en InventoryUpdatedEvent för att visa att uppgiften är slutförd.

public class InventoryService {
  public static void handlePaymentProcessed(String orderId) {
    System.out.println("Inventory Service: Received 'PaymentProcessedEvent' for order " + orderId);
    System.out.println("Inventory Service: Updating stock for order " + orderId + "...");
    // Simulate inventory database update
    System.out.println("Inventory Service: Stock updated for order " + orderId + ".");
    System.out.println("Inventory Service: Publishing 'InventoryUpdatedEvent' for " + orderId);
  }

  public static void main(String[] args) {
    handlePaymentProcessed("ORD789"); // Simulate receiving an event
  }
}

Utmaningen med fel

Vad händer om ett steg i det här flödet misslyckas? Om betalningen till exempel misslyckas kan vi inte uppdatera lagret. Vi måste också upphäva alla tidigare steg som lyckades.

Det är här kompensationslogik kommer in. Det handlar om att återställa tidigare genomförda åtgärder.

Kompensation i Choreography

I en choreography-Saga sker kompensation också genom händelser. Om en tjänst misslyckas publicerar den en kompensationshändelse.

Andra tjänster lyssnar efter dessa kompensationshändelser och utför sina egna återställningsåtgärder.

Exempel på kompensation: Betalningen misslyckas

Föreställ er att Payment Service misslyckas och publicerar en PaymentFailedEvent. Order Service, som startade Sagan, lyssnar efter den här händelsen.

När Order Service tar emot den uppdaterar tjänsten orderstatusen till 'Cancelled', vilket i praktiken återställer transaktionen från dess sida.

public class OrderService {
  public static void handlePaymentFailed(String orderId) {
    System.out.println("Order Service: Received 'PaymentFailedEvent' for order " + orderId);
    System.out.println("Order Service: Initiating compensation for " + orderId + ".");
    // Change order status to 'Cancelled'
    System.out.println("Order Service: Updating order " + orderId + " status to 'Cancelled'.");
    // Could publish OrderCancelledEvent if other services need to know
  }

  public static void main(String[] args) {
    handlePaymentFailed("ORD789"); // Simulate receiving a compensation event
  }
}

Fördelar och nackdelar med Choreography

Choreography har fördelar men innebär också utmaningar:

  • Fördelar: Tjänsterna är starkt frikopplade, det finns ingen central felpunkt och mönstret är enklare att implementera för enkla flöden.
  • Nackdelar: Det kan vara svårare att övervaka det övergripande transaktionsflödet, kompensationslogiken kan bli komplex och det finns risk för 'händelsestormar' om lösningen inte utformas omsorgsfullt.

Test: Choreography

Föreställ er en choreography-Saga där en 'OrderConfirmedEvent' publiceras. Vilket påstående beskriver korrekt hur nästa steg initieras?

Sammanfattning: Choreography Saga

Ni har lärt er om mönstret Choreography Saga:

  • Det är ett decentraliserat tillvägagångssätt för distribuerade transaktioner.
  • Tjänster kommunicerar genom att publicera och prenumerera på händelser.
  • Det finns ingen central samordnare; varje tjänst känner till sin roll.
  • Kompensation vid fel hanteras också via händelser, så att tjänster kan återställa sina åtgärder.

Mönstret främjar lös koppling men kräver noggrann utformning för övervakning och kompensation.

Gratis att börja

Lär dig Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Choreography Saga förklarad” gratis?

Ja – hela texten till ”Choreography Saga förklarad” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker), kan Ni uppgradera till CoddyKit PRO. Kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) innehåller totalt 4 lektioner.

Vad lär jag mig i ”Choreography Saga förklarad”?

Förstå choreography-metoden, där tjänster kommunicerar direkt via händelser utan en central samordnare. Ni övar på Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)?

Du behöver inga förkunskaper. Utbildningen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Choreography Saga förklarad”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)-lektionen?

Ja. Varje Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Vad är Saga-mönstret?
  2. Choreography Saga förklarad
  3. Orchestration Saga förklarad
  4. Välj mellan choreography och orchestration
← Tillbaka till Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)