Spring Boot 4-mikrotjänster och REST API:er · Lektion

Händelsestyrd integrering av mikrotjänster

Designa och implementera asynkrona kommunikationsmönster mellan mikrotjänster med Kafka.

Lektion 3 av 311 steg

Händelsestyrd integrering av mikrotjänster är en gratis lektion i Spring Boot 4-mikrotjänster och REST API:er på CoddyKit. Detta är lektion 3 av 3. 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 Spring Boot 4-mikrotjänster och REST API:er, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 3 lektioner.

Händelsestyrda mikrotjänster

Välkommen till integration av händelsestyrda mikrotjänster! I den här lektionen lär vi oss hur mikrotjänster kan kommunicera asynkront med hjälp av händelser.

En händelsestyrd arkitektur (EDA) är ett designmönster för programvara där tjänster kommunicerar genom att producera och konsumera "händelser". Dessa händelser är poster som beskriver något som har hänt.

Detta tillvägagångssätt bidrar till att skapa system som är löst kopplade, skalbara och motståndskraftiga.

Fördelar med asynkron kommunikation

Varför välja händelsestyrd kommunikation framför direkta API-anrop (synkrona anrop)?

  • Lös koppling: Tjänster behöver inte känna till varandras existens. De behöver bara bry sig om händelser.
  • Motståndskraft: Om en konsumerande tjänst ligger nere lagras händelserna och bearbetas senare, vilket förhindrar kedjefel.
  • Skalbarhet: Producenter kan publicera händelser utan att vänta på konsumenter, och flera konsumenter kan bearbeta händelser parallellt.

Kafka som händelsebuss

Apache Kafka fungerar som en central "händelsebuss" eller meddelandeförmedlare i många händelsestyrda arkitekturer.

Producenter skickar händelser till Kafkas ämnen, och konsumenter läser händelser från dessa ämnen. Kafka lagrar händelserna beständigt, vilket säkerställer att inga data går förlorade.

Detta gör att tjänster kan kommunicera utan direkta anslutningar, vilket förenklar deras utformning och driftsättning.

En OrderCreated-händelse

En händelse är ett lättviktsmeddelande som anger att något betydelsefullt har inträffat. Den innehåller vanligtvis händelsetypen, en tidsstämpel och relevanta data.

Vi definierar en enkel OrderCreatedEvent som vår OrderService kan publicera när en ny order läggs.

public class OrderCreatedEvent {
  private String orderId;
  private String customerId;
  private double amount;
  private long timestamp;

  public OrderCreatedEvent(String orderId, String customerId, double amount) {
    this.orderId = orderId;
    this.customerId = customerId;
    this.amount = amount;
    this.timestamp = System.currentTimeMillis();
  }

  public String getOrderId() { return orderId; }
  public String getCustomerId() { return customerId; }
  public double getAmount() { return amount; }
  public long getTimestamp() { return timestamp; }

  @Override
  public String toString() {
    return "OrderCreatedEvent{" +
           "orderId='" + orderId + '\'' +
           ", customerId='" + customerId + '\'' +
           ", amount=" + amount +
           ", timestamp=" + timestamp +
           '}';
  }
}

Ordertjänsten som producent

Vår OrderService ansvarar för att skapa nya order. När en order har skapats publicerar tjänsten en OrderCreatedEvent till ett Kafka-ämne.

Denna händelse kan sedan konsumeras av andra tjänster, till exempel en InventoryService, utan att OrderService behöver känna till något om dem.

// Simulates a Kafka producer component
public class OrderProducer {
  public void sendOrderCreatedEvent(OrderCreatedEvent event) {
    // In a real Spring Boot app, this would use KafkaTemplate.send()
    System.out.println("Producer: Sending event to Kafka topic 'orders':");
    System.out.println("  " + event.toString());
  }
}

Prova producenten

Så här utlöser du vanligtvis producentlogiken. Kör den här koden för att se den simulerade händelsen "skickas".

// Represents an event when an order is created
class OrderCreatedEvent {
  private String orderId;
  private String customerId;
  private double amount;
  private long timestamp;

  public OrderCreatedEvent(String orderId, String customerId, double amount) {
    this.orderId = orderId;
    this.customerId = customerId;
    this.amount = amount;
    this.timestamp = System.currentTimeMillis();
  }

  public String getOrderId() { return orderId; }
  public String getCustomerId() { return customerId; }
  public double getAmount() { return amount; }
  public long getTimestamp() { return timestamp; }

  @Override
  public String toString() {
    return "OrderCreatedEvent{" +
           "orderId='" + orderId + '\'' +
           ", customerId='" + customerId + '\'' +
           ", amount=" + amount +
           ", timestamp=" + timestamp +
           '}';
  }
}

// Simulates a Kafka producer component
class OrderProducer {
  public void sendOrderCreatedEvent(OrderCreatedEvent event) {
    System.out.println("Producer: Sending event to Kafka topic 'orders':");
    System.out.println("  " + event.toString());
  }
}

public class Main {
  public static void main(String[] args) {
    System.out.println("Order Service simulation started.");

    OrderProducer producer = new OrderProducer();

    // Simulate an order creation
    OrderCreatedEvent event = new OrderCreatedEvent("ORD-001", "CUST-123", 99.99);
    producer.sendOrderCreatedEvent(event);

    System.out.println("Order Service simulation finished.");
  }
}

Lagerhanteringstjänsten som konsument

Vår InventoryService behöver känna till när nya order läggs så att lagernivåerna kan uppdateras. Den lyssnar efter OrderCreatedEvent-händelser från Kafka-ämnet.

När en händelse anländer bearbetar konsumenten den, till exempel genom att dra av artiklar från lagret eller initiera en leveransprocess.

// Simulates a Kafka consumer component
public class InventoryConsumer {
  public void listenOrderCreatedEvent(OrderCreatedEvent event) {
    // In a real Spring Boot app, this would be an @KafkaListener method
    System.out.println("Consumer: Received event from Kafka topic 'orders':");
    System.out.println("  " + event.toString());
    System.out.println("  Updating inventory for order " + event.getOrderId());
  }
}

Prova konsumenten

Den här koden simulerar hur InventoryConsumer lyssnar efter en händelse. I ett verkligt scenario skulle den köras kontinuerligt och bearbeta inkommande händelser.

// Represents an event when an order is created
class OrderCreatedEvent {
  private String orderId;
  private String customerId;
  private double amount;
  private long timestamp;

  public OrderCreatedEvent(String orderId, String customerId, double amount) {
    this.orderId = orderId;
    this.customerId = customerId;
    this.amount = amount;
    this.timestamp = System.currentTimeMillis();
  }

  public String getOrderId() { return orderId; }
  public String getCustomerId() { return customerId; }
  public double getAmount() { return amount; }
  public long getTimestamp() { return timestamp; }

  @Override
  public String toString() {
    return "OrderCreatedEvent{" +
           "orderId='" + orderId + '\'' +
           ", customerId='" + customerId + '\'' +
           ", amount=" + amount +
           ", timestamp=" + timestamp +
           '}';
  }
}

// Simulates a Kafka consumer component
class InventoryConsumer {
  public void listenOrderCreatedEvent(OrderCreatedEvent event) {
    System.out.println("Consumer: Received event from Kafka topic 'orders':");
    System.out.println("  " + event.toString());
    System.out.println("  Updating inventory for order " + event.getOrderId());
  }
}

public class Main {
  public static void main(String[] args) {
    System.out.println("Inventory Service simulation started.");

    InventoryConsumer consumer = new InventoryConsumer();

    // Simulate receiving an event (e.g., from Kafka)
    // This event would typically come from a Producer
    OrderCreatedEvent receivedEvent = new OrderCreatedEvent("ORD-001", "CUST-123", 99.99);
    consumer.listenOrderCreatedEvent(receivedEvent);

    System.out.println("Inventory Service simulation finished.");
  }
}

Viktiga överväganden

När du arbetar med händelsestyrda system är två centrala begrepp viktiga:

  • Eventual consistency: Data i olika tjänster kanske inte är konsekventa omedelbart. De blir konsekventa "så småningom".
  • Idempotens: Konsumenter bör utformas så att de kan hantera duplicerade händelser på ett korrekt sätt. Om samma händelse bearbetas flera gånger ska resultatet inte förändras.

Dessa begrepp är avgörande för att bygga robusta asynkrona mikrotjänster.

Integrationskontroll

Vilka av följande är viktiga fördelar med att använda en händelsestyrd arkitektur för integration av mikrotjänster jämfört med direkta synkrona API-anrop?

Sammanfattning: Händelsestyrning

Bra jobbat! I den här lektionen har du lärt dig om händelsestyrd integration av mikrotjänster:

  • Fördelarna med asynkron kommunikation, till exempel lös koppling, motståndskraft och skalbarhet.
  • Hur Kafka fungerar som en händelsebuss.
  • Vilka roller producent- och konsumentmikrotjänster har när de publicerar och bearbetar händelser.
  • Viktiga begrepp som eventual consistency och idempotens.

Nu är du redo att utforma robustare och mer skalbara interaktioner mellan mikrotjänster!

Gratis att börja

Lär dig Java 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
24
Lektioner
93

Vanliga frågor

Är lektionen ”Händelsestyrd integrering av mikrotjänster” gratis?

Ja – hela texten till ”Händelsestyrd integrering av mikrotjänster” 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 Spring Boot 4-mikrotjänster och REST API:er, kan Ni uppgradera till CoddyKit PRO. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 3 lektioner.

Vad lär jag mig i ”Händelsestyrd integrering av mikrotjänster”?

Designa och implementera asynkrona kommunikationsmönster mellan mikrotjänster med Kafka. Ni övar på Spring Boot 4-mikrotjänster och REST API:er 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 Spring Boot 4-mikrotjänster och REST API:er?

Du behöver inga förkunskaper. Utbildningen i Spring Boot 4-mikrotjänster och REST API:er 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 3 av 3.

Hur lång tid tar lektionen ”Händelsestyrd integrering av mikrotjänster”?

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 Spring Boot 4-mikrotjänster och REST API:er-lektionen?

Ja. Varje Spring Boot 4-mikrotjänster och REST API:er-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. Introduktion till Kafka-producenter
  2. Bygga Kafka-konsumenter
  3. Händelsestyrd integrering av mikrotjänster
← Tillbaka till Spring Boot 4-mikrotjänster och REST API:er