Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про RabbitMQ: consistency, messaging

Проблема: событие отправлено в RabbitMQ, но транзакция не закоммитилась. Как обеспечить консистентность?

Вопрос объясняет решение проблемы согласованности данных.

Короткий ответ

Используйте Transactional Outbox:

  1. Сохраняйте событие в БД в той же транзакции.

  2. Отправляйте в RabbitMQ через фоновый процесс.

Длинный ответ

Шаги реализации:

  1. Локальная транзакция:

    @Transactional
    public void processOrder(Order order) {
        orderRepository.save(order);
        outboxRepository.save(new OutboxEvent("order_created", order.getId()));
    }
  2. Фоновый процесс:

    • Отправляет события из outbox в RabbitMQ.

    • Удаляет записи после успешной отправки.

Альтернатива:

  • Подтверждение транзакции (если БД и RabbitMQ поддерживают XA-транзакции).

  • Аватар

    System Analysis Guru

    Tsarev Andrei

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    1

  • Сложность:

    8

Навыки

  • RabbitMQ

    RabbitMQ

Ключевые слова

#consistency

#messaging

Подпишись на Java Developer в телеграм

  • Аватар

    System Analysis Guru

    Tsarev Andrei

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.