Projektowanie sag sterowanych zdarzeniami
Proszę zaprojektować przebieg sagi choreograficznej, wykorzystując zdarzenia do wyzwalania działań w różnych mikrousługach.
Projektowanie sag sterowanych zdarzeniami to bezpłatna lekcja Microservices Communication Patterns (Saga, Circuit Breaker) na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Microservices Communication Patterns (Saga, Circuit Breaker), a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Microservices Communication Patterns (Saga, Circuit Breaker) zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Event-Driven Saga Design
Welcome! In this lesson, we'll learn how to design the flow of a Choreography Saga. This pattern helps manage complex business transactions that span multiple services.
We'll focus on using events as the primary way services communicate and trigger each other's actions.
Choreography Refresher
Remember Choreography Sagas? In this style, services communicate directly by publishing and subscribing to events.
- No central orchestrator: Services react to events from others.
- Decentralized decisions: Each service decides its next step based on the event it receives.
Our Business Scenario
Let's design a saga for an "Online Order Placement" system. This common scenario involves several steps across different microservices:
- Customer places order.
- Inventory is checked and reserved.
- Payment is processed.
- Order is shipped.
Identifying Core Saga Steps
For our "Order Placement" saga, we can break it down into these main steps, each potentially handled by a different service:
- Order Service: Creates the order.
- Inventory Service: Reserves items.
- Payment Service: Processes payment.
- Shipping Service: Schedules shipment.
Events Drive the Flow
In a choreography saga, each step is initiated by an event. When one service completes its task, it publishes an event.
Other services, interested in that event, subscribe to it and react accordingly. This creates a chain reaction.
Kicking Off the Saga
Every saga needs a starting point. For our "Order Placement," the Order Service initiates the process.
When a customer places an order, the Order Service creates it and publishes an OrderCreatedEvent.
Inventory Reacts to Order
The Inventory Service subscribes to OrderCreatedEvent. Upon receiving it, it attempts to reserve the items for the order.
After processing, it publishes either an InventoryReservedEvent or an InventoryFailedEvent.
class OrderCreatedEvent {
String orderId;
String customerId;
// ... item details
}
class InventoryService {
public void handleOrderCreated(OrderCreatedEvent event) {
System.out.println("Inventory Service: Received OrderCreatedEvent for " + event.orderId);
// Logic to reserve items...
boolean success = true; // Assume success for now
if (success) {
System.out.println("Inventory Service: Items reserved. Publishing InventoryReservedEvent.");
// In a real system, publish InventoryReservedEvent
} else {
System.out.println("Inventory Service: Inventory failed. Publishing InventoryFailedEvent.");
// In a real system, publish InventoryFailedEvent
}
}
}
public class Main {
public static void main(String[] args) {
InventoryService inventory = new InventoryService();
OrderCreatedEvent newOrder = new OrderCreatedEvent();
newOrder.orderId = "ORD123";
newOrder.customerId = "CUST456";
inventory.handleOrderCreated(newOrder);
}
}Payment Reacts to Inventory
The Payment Service subscribes to InventoryReservedEvent. This means payment only proceeds if inventory is successfully reserved.
It processes the payment and then publishes either a PaymentProcessedEvent or a PaymentFailedEvent.
Shipping Reacts to Payment
Finally, the Shipping Service subscribes to PaymentProcessedEvent. It schedules the shipment only after payment is confirmed.
It then publishes an OrderShippedEvent to complete the main saga flow.
Planning for Rollbacks
What if a step fails? For example, if payment fails after inventory is reserved? In a choreography saga, we use compensation events.
The Payment Service would publish a PaymentFailedEvent. The Inventory Service would subscribe to this event and publish an InventoryReleasedEvent to undo its previous action.
Saga Flow Check
Consider our Order Placement saga. What is the correct sequence of events if the entire process is successful?
Recap: Designing Event Flows
We've learned how to design a choreography saga by breaking down a business transaction into steps.
- Each step publishes an event to trigger the next.
- We identified the initial event and subsequent events for a successful flow.
- We also briefly considered how compensation events are used to handle failures.
Next, we'll explore how message brokers facilitate this communication!
Często zadawane pytania
Czy lekcja „Projektowanie sag sterowanych zdarzeniami” jest bezpłatna?
Tak — pełny tekst „Projektowanie sag sterowanych zdarzeniami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Microservices Communication Patterns (Saga, Circuit Breaker), przejdź na CoddyKit PRO. Kurs Microservices Communication Patterns (Saga, Circuit Breaker) zawiera 4 lekcji w sumie.
Co nauczysz się w „Projektowanie sag sterowanych zdarzeniami”?
Proszę zaprojektować przebieg sagi choreograficznej, wykorzystując zdarzenia do wyzwalania działań w różnych mikrousługach. Ćwiczysz Microservices Communication Patterns (Saga, Circuit Breaker) z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Microservices Communication Patterns (Saga, Circuit Breaker)?
Nie wymagamy żadnego doświadczenia. Microservices Communication Patterns (Saga, Circuit Breaker) w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Projektowanie sag sterowanych zdarzeniami”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Microservices Communication Patterns (Saga, Circuit Breaker)?
Tak. Każda lekcja Microservices Communication Patterns (Saga, Circuit Breaker) zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Projektowanie sag sterowanych zdarzeniami
- Magistrala zdarzeń i brokerzy wiadomości
- Obsługa kompensacji za pomocą zdarzeń
- Budowanie idempotentnych konsumentów zdarzeń