Встречается на 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` тоже подходит
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы