Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät · Oppitunti

Tapahtumapohjainen mikropalveluintegraatio

Suunnitelkaa ja toteuttakaa mikropalvelujen välistä asynkronista viestintää Kafkaa käyttäen.

Oppitunti 3/311 vaihetta

Tapahtumapohjainen mikropalveluintegraatio on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.

Tapahtumapohjaiset mikropalvelut

Tervetuloa tapahtumapohjaiseen mikropalveluintegraatioon! Tässä oppitunnissa opitte, miten mikropalvelut voivat viestiä keskenään asynkronisesti tapahtumien avulla.

Tapahtumapohjainen arkkitehtuuri (EDA) on ohjelmistojen suunnittelumalli, jossa palvelut viestivät tuottamalla ja kuluttamalla ”tapahtumia”. Nämä tapahtumat ovat tietueita jostakin tapahtuneesta.

Tämä lähestymistapa auttaa luomaan erittäin löyhästi kytkettyjä, skaalautuvia ja vikasietoisia järjestelmiä.

Asynkronisuuden hyödyt

Miksi valita tapahtumapohjainen viestintä suorien API-kutsujen (synkronisen viestinnän) sijaan?

  • Löyhä kytkentä: Palvelujen ei tarvitse tietää toistensa olemassaolosta. Ne välittävät vain tapahtumista.
  • Vikasietoisuus: Jos kuluttajapalvelu ei ole käytettävissä, tapahtumat tallennetaan ja käsitellään myöhemmin, mikä estää ketjureaktiomaiset virheet.
  • Skaalautuvuus: Tuottajat voivat julkaista tapahtumia odottamatta kuluttajia, ja useat kuluttajat voivat käsitellä tapahtumia rinnakkain.

Kafka tapahtumaväylänä

Apache Kafka toimii monissa tapahtumapohjaisissa arkkitehtuureissa keskitettynä ”tapahtumaväylänä” eli viestinvälittäjänä.

Tuottajat lähettävät tapahtumia Kafkan aiheisiin, ja kuluttajat lukevat tapahtumia näistä aiheista. Kafka tallentaa tapahtumat pysyvästi, mikä varmistaa, ettei tietoja menetetä.

Näin palvelut voivat viestiä ilman suoria yhteyksiä, mikä yksinkertaistaa niiden suunnittelua ja käyttöönottoa.

OrderCreated-tapahtuma

Tapahtuma on kevyt viesti, joka ilmaisee jonkin merkittävän tapahtuneen. Se sisältää yleensä tapahtuman tyypin, aikaleiman ja olennaiset tiedot.

Määritellään yksinkertainen OrderCreatedEvent, jonka OrderService voisi julkaista uuden tilauksen tekemisen yhteydessä.

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 +
           '}';
  }
}

OrderService tuottajana

OrderService vastaa uusien tilausten luomisesta. Kun tilaus on luotu onnistuneesti, se julkaisee OrderCreatedEvent-tapahtuman Kafka-aiheeseen.

Muut palvelut, kuten InventoryService, voivat sen jälkeen kuluttaa tämän tapahtuman ilman, että OrderService-palvelun tarvitsee tietää niistä mitään.

// 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());
  }
}

Kokeile tuottajaa

Tuottajan logiikka käynnistetään tyypillisesti seuraavasti. Suorittakaa tämä koodi nähdäksenne simuloidun tapahtuman ”lähettämisen”.

// 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.");
  }
}

InventoryService kuluttajana

InventoryService tarvitsee tiedon uusista tilauksista voidakseen päivittää varastomääriä. Se kuuntelee Kafka-aiheesta tulevia OrderCreatedEvent-tapahtumia.

Kun tapahtuma saapuu, kuluttaja käsittelee sen esimerkiksi vähentämällä tuotteita varastosta tai käynnistämällä toimitusprosessin.

// 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());
  }
}

Kokeile kuluttajaa

Tämä koodi simuloi InventoryConsumer-kuluttajaa, joka kuuntelee tapahtumaa. Todellisessa tilanteessa se suoritettaisiin jatkuvasti ja saapuvia tapahtumia käsiteltäisiin sitä mukaa.

// 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.");
  }
}

Tärkeät huomioitavat asiat

Tapahtumapohjaisten järjestelmien parissa työskenneltäessä kaksi keskeistä käsitettä ovat tärkeitä:

  • Lopullinen eheys: Eri palvelujen tiedot eivät välttämättä ole heti yhdenmukaisia. Ne saavuttavat yhdenmukaisuuden ”lopulta”.
  • Idempotenssi: Kuluttajat tulee suunnitella käsittelemään päällekkäiset tapahtumat hallitusti. Saman tapahtuman käsittely useita kertoja ei saa muuttaa lopputulosta.

Nämä ovat ratkaisevan tärkeitä vankkojen asynkronisten mikropalvelujen rakentamisessa.

Integraation tarkistus

Mitkä seuraavista ovat tapahtumapohjaisen arkkitehtuurin keskeisiä hyötyjä mikropalvelujen integroinnissa verrattuna suoriin synkronisiin API-kutsuihin?

Tapahtumapohjaisen arkkitehtuurin kertaus

Hienoa työtä! Tässä oppitunnissa opitte tapahtumapohjaisesta mikropalveluintegraatiosta:

  • Asynkronisen viestinnän hyödyt, kuten löyhä kytkentä, vikasietoisuus ja skaalautuvuus.
  • Miten Kafka toimii tapahtumaväylänä.
  • Tuottaja- ja kuluttajamikropalvelujen roolit tapahtumien julkaisemisessa ja käsittelyssä.
  • Tärkeitä käsitteitä, kuten lopullinen eheys ja idempotenssi.

Olette nyt valmiita suunnittelemaan vankempia ja skaalautuvampia mikropalvelujen välisiä vuorovaikutuksia!

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
24
Oppitunnit
93

Usein kysytyt kysymykset

Onko oppitunti ”Tapahtumapohjainen mikropalveluintegraatio” ilmainen?

Kyllä – oppitunnin ”Tapahtumapohjainen mikropalveluintegraatio” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Tapahtumapohjainen mikropalveluintegraatio”?

Suunnitelkaa ja toteuttakaa mikropalvelujen välistä asynkronista viestintää Kafkaa käyttäen. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.

Kuinka kauan ”Tapahtumapohjainen mikropalveluintegraatio”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?

Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Johdatus Kafka-tuottajiin
  2. Kafka-kuluttajien rakentaminen
  3. Tapahtumapohjainen mikropalveluintegraatio
← Takaisin: Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät