Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про RabbitMQ: idempotency, deduplication, message broker

Как избежать двойной тарификации при использовании RabbitMQ? (идемпотентность обработки сообщений)

Вопрос проверяет понимание проблемы двойной обработки сообщений и способов её решения через идемпотентность.

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

Чтобы избежать двойной тарификации:

  • Используйте уникальные идентификаторы сообщений (message_id).

  • Сохраняйте обработанные ID в БД и проверяйте их перед обработкой.

  • Применяйте идемпотентные операции (повторное выполнение не меняет результат).

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

Проблема:
Сообщение может быть доставлено повторно из-за:

  • Повторной отправки от производителя.

  • Ошибок сети или потребителя.

Решение:

  1. Идемпотентный потребитель:

    • Сохраняйте message_id в таблицу processed_messages.

    • Перед обработкой проверяйте наличие ID:

      SELECT id FROM processed_messages WHERE message_id = ?;
  2. Дедупликация на стороне RabbitMQ:

    • Включите deduplication в плагине rabbitmq_message_deduplication.

  3. Паттерн "Транзакционный аутбокс":

    • Сохраняйте факт обработки в той же транзакции, что и бизнес-логика.

Пример кода:

@RabbitListener(queues = "billing")
public void handleMessage(Message message) {
    String messageId = message.getMessageProperties().getMessageId();
    if (isProcessed(messageId)) {
        return; // Пропускаем дубликат
    }
    processPayment(message);
    saveProcessedId(messageId); // Сохраняем ID в БД
}
  • Аватар

    System Analysis Guru

    Tsarev Andrei

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

Уровень

  • Рейтинг:

    1

  • Сложность:

    8

Навыки

  • RabbitMQ

    RabbitMQ

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

#idempotency

#deduplication

#message broker

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

  • Аватар

    System Analysis Guru

    Tsarev Andrei

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