Advanced Patterns
Saga Pattern for Distributed Transactions
// Create a saga coordinator
const orderSaga = createNode("order-saga");
// Start saga for order processing
orderSaga.on("process-order", async (event) => {
const { orderId } = event.payload;
const context = { orderId, steps: [] };
try {
// Step 1: Reserve inventory
const inventoryResult = await orderSaga.send(inventoryNode, {
type: "reserve-inventory",
payload: event.payload
}).return();
if (!inventoryResult.success) {
throw new Error(`Inventory reservation failed: ${inventoryResult.reason}`);
}
context.steps.push("inventory-reserved");
// Step 2: Process payment
const paymentResult = await orderSaga.send(paymentNode, {
type: "process-payment",
payload: event.payload
}).return();
if (!paymentResult.success) {
throw new Error(`Payment failed: ${paymentResult.reason}`);
}
context.steps.push("payment-processed");
context.paymentId = paymentResult.paymentId;
// Step 3: Create shipment
const shipmentResult = await orderSaga.send(shipmentNode, {
type: "create-shipment",
payload: {
orderId,
items: event.payload.items,
address: event.payload.shippingAddress
}
}).return();
if (!shipmentResult.success) {
throw new Error(`Shipment creation failed: ${shipmentResult.reason}`);
}
// Complete the saga
orderSaga.broadcast({
type: "order-processed",
payload: {
orderId,
status: "processed",
shipmentId: shipmentResult.shipmentId
}
});
return {
success: true,
orderId,
shipmentId: shipmentResult.shipmentId
};
} catch (error) {
// Execute compensating transactions in reverse order
if (context.steps.includes("payment-processed")) {
await orderSaga.send(paymentNode, {
type: "refund-payment",
payload: {
paymentId: context.paymentId
}
}).return();
}
if (context.steps.includes("inventory-reserved")) {
await orderSaga.send(inventoryNode, {
type: "release-inventory",
payload: event.payload
}).return();
}
// Saga failed
orderSaga.broadcast({
type: "order-processing-failed",
payload: {
orderId,
reason: error.message
}
});
return {
success: false,
reason: error.message
};
}
});Retry Pattern with Exponential Backoff
Circuit Breaker Pattern
Supervisor Pattern
State Machine Workflow
Reactive Aggregates
Last updated