เครื่องจักรสถานะสำหรับการประสานงาน
ประยุกต์ใช้แนวคิดเครื่องจักรสถานะเพื่อสร้างตัวประสานงาน Saga ที่รัดกุมและคาดการณ์ได้ โดยติดตามความคืบหน้าของธุรกรรม
เครื่องจักรสถานะสำหรับการประสานงาน เป็นบทเรียน Microservices Communication Patterns (Saga, Circuit Breaker) ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Microservices Communication Patterns (Saga, Circuit Breaker) และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Microservices Communication Patterns (Saga, Circuit Breaker) มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
State Machines for Sagas
Welcome to this lesson on using state machines to build robust saga orchestrators!
Orchestration sagas manage complex distributed transactions by keeping track of the overall process. State machines are a powerful tool for this.
Why State Machines?
A saga orchestrator needs to know the exact status of a business process at any given moment. This allows it to:
- Decide the next action to take.
- Handle failures and trigger compensation.
- Ensure consistency across multiple services.
State machines provide a clear, structured way to model this complex logic.
State Machine Basics
At its core, a state machine consists of three main concepts:
- States: Represent different phases or conditions of the saga (e.g.,
OrderCreated,PaymentPending). - Events: Occurrences that trigger changes in the saga (e.g.,
PaymentSuccessful,ShipmentFailed). - Transitions: Rules that define how an event causes the saga to move from one state to another.
Example: Order Processing Saga
Let's consider a common scenario: an online order processing saga.
This saga might involve several services:
- Order Service
- Payment Service
- Shipping Service
The orchestrator needs to coordinate these steps.
Defining Saga States
For our order processing saga, we can define states like:
ORDER_CREATED: Initial state.PAYMENT_PENDING: Waiting for payment confirmation.PAID: Payment successful.SHIPPING_PENDING: Waiting for shipment to be initiated.SHIPPED: Item has been shipped.CANCELLED: Order cancelled (due to failure or user action).
Defining Saga Events
And the events that can occur:
ORDER_PLACED: Customer places an order.PAYMENT_SUCCESS: Payment service confirms payment.PAYMENT_FAILED: Payment service reports failure.SHIPMENT_SUCCESS: Shipping service confirms shipment.SHIPMENT_FAILED: Shipping service reports an issue.ORDER_CANCELLED_REQUEST: User requests cancellation.
State Transition Logic
The core of a state machine is its transition logic: Current State + Event = New State (and possibly an action).
For example:
- If in
ORDER_CREATEDstate andORDER_PLACEDevent occurs, transition toPAYMENT_PENDING. - If in
PAYMENT_PENDINGstate andPAYMENT_SUCCESSevent occurs, transition toPAID.
This defines the predictable flow of your saga.
Code: Simple State Transition
Here's a simplified Java example demonstrating how states and events can drive transitions in an orchestrator.
Try running it to see the state changes!
public class SimpleSagaState {
public enum SagaStepState {
STARTED,
PROCESSING_PAYMENT,
PAYMENT_COMPLETE,
FAILED
}
private SagaStepState currentState;
public SimpleSagaState() {
this.currentState = SagaStepState.STARTED;
}
public SagaStepState getCurrentState() {
return currentState;
}
public void processEvent(String event) {
System.out.println("Event: " + event);
switch (currentState) {
case STARTED:
if ("OrderCreated".equals(event)) {
currentState = SagaStepState.PROCESSING_PAYMENT;
}
break;
case PROCESSING_PAYMENT:
if ("PaymentSuccess".equals(event)) {
currentState = SagaStepState.PAYMENT_COMPLETE;
} else if ("PaymentFailed".equals(event)) {
currentState = SagaStepState.FAILED;
}
break;
case PAYMENT_COMPLETE:
// After payment, might go to shipping, etc.
break;
case FAILED:
System.out.println("Saga already failed.");
break;
}
System.out.println("New State: " + currentState);
}
public static void main(String[] args) {
SimpleSagaState saga = new SimpleSagaState();
System.out.println("Initial State: " + saga.getCurrentState());
saga.processEvent("OrderCreated");
saga.processEvent("PaymentSuccess");
saga.processEvent("ShipmentInitiated"); // This event won't change state in this simplified example
System.out.println("Final State: " + saga.getCurrentState());
}
}Compensation with States
One of the biggest advantages of using state machines for sagas is how they simplify compensation logic.
If a service fails, the orchestrator receives a 'failed' event. Based on the current state, the state machine can determine which compensation actions need to be triggered to reverse previous successful steps.
For example, if in PAID state and SHIPMENT_FAILED occurs, the state machine can transition to CANCELLED and trigger a refund.
State Transition Question
Consider an order saga using a state machine. The order is currently in the PAYMENT_PENDING state.
If the orchestrator receives a PAYMENT_FAILED event, what is the most appropriate next state for the saga, typically indicating compensation?
Recap: States for Orchestration
In this lesson, we explored how state machines are crucial for building robust saga orchestrators.
- They provide a clear model for tracking saga progress.
- States, Events, and Transitions define the saga's flow.
- They simplify handling complex logic, especially for compensation.
By explicitly defining states and transitions, you create predictable and resilient distributed transactions.
เรียนรู้ Microservices Communication Patterns (Saga, Circuit Breaker) ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “เครื่องจักรสถานะสำหรับการประสานงาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เครื่องจักรสถานะสำหรับการประสานงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Microservices Communication Patterns (Saga, Circuit Breaker) ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Microservices Communication Patterns (Saga, Circuit Breaker) มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เครื่องจักรสถานะสำหรับการประสานงาน”
ประยุกต์ใช้แนวคิดเครื่องจักรสถานะเพื่อสร้างตัวประสานงาน Saga ที่รัดกุมและคาดการณ์ได้ โดยติดตามความคืบหน้าของธุรกรรม คุณปฏิบัติ Microservices Communication Patterns (Saga, Circuit Breaker) ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Microservices Communication Patterns (Saga, Circuit Breaker) หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Microservices Communication Patterns (Saga, Circuit Breaker) บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “เครื่องจักรสถานะสำหรับการประสานงาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Microservices Communication Patterns (Saga, Circuit Breaker) นี้ได้ไหม
ได้ บทเรียน Microservices Communication Patterns (Saga, Circuit Breaker) ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การออกแบบตัวประสานงาน Saga
- เครื่องจักรสถานะสำหรับการประสานงาน
- การนำไปใช้ด้วยเครื่องมือกระบวนงาน
- การทดสอบซากาแบบควบคุมจากศูนย์กลาง