Встречается на 2% собеседований по Java

Как реализовать распределенные транзакции используя протокол очередей

Для распределенных транзакций с очередями можно использовать паттерн Saga или 2PC (Two-Phase Commit). В Java часто применяют Spring Integration или JMS с поддержкой XA-транзакций.

Пример Saga с Kafka и Spring Boot:

java
@Service
public class OrderSaga {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
text
@Transactional
public void processOrder(Order order) {
    // 1. Локальная транзакция
    orderRepository.save(order);
    
    // 2. Отправка события в очередь
    kafkaTemplate.send("order-created", order.toJson())
        .addCallback(
            success -> {}, 
            error -> compensate(order) // Компенсирующее действие
        );
}

private void compensate(Order order) {
    orderRepository.delete(order);
}

}

text

Ключевые моменты:
- Используйте идемпотентные операции
- Реализуйте компенсирующие транзакции для отката
- Для строгой согласованности рассмотрите 2PC с JTA (Java Transaction API)
- RabbitMQ с плагином `rabbitmq_message_timestamp` тоже подходит
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы