Встречается на собеседованиях • сегодня
Знаешь ли как написать распределенную транзакцию в микросервисной архитектуре
Распределенные транзакции в микросервисах обычно реализуют через паттерн Saga. Вместо ACID используется подход компенсирующих операций. Есть 2 варианта:
- Хореография - сервисы общаются через события:
java
// OrderService
@Transactional
public void createOrder() {
// Локальная транзакция
orderRepository.save(order);
eventPublisher.publish(new OrderCreatedEvent(orderId));
}
// PaymentService (подписан на OrderCreatedEvent)
public void onOrderCreated(OrderCreatedEvent event) {
try {
processPayment();
} catch (Exception e) {
eventPublisher.publish(new PaymentFailedEvent(event.orderId()));
}
}
text
2. **Оркестрация** - центральный координатор управляет потоком:
```java
// SagaOrchestrator
public void executeOrderSaga() {
try {
orderService.createOrder();
paymentService.processPayment();
inventoryService.reserveItems();
} catch (Exception e) {
// Компенсирующие транзакции
paymentService.cancelPayment();
orderService.cancelOrder();
}
}Для надежности часто используют Outbox Pattern и идемпотентные операции. Альтернативы - двухфазный коммит (2PC) или SAGA через Apache Camel.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы