bitrix-code
Интеграции

RabbitMQ для интеграций Битрикс24: устойчивость к сбоям

Алексей Завьялов, Tech Lead11 мин

Когда в интеграции появляется третья система, а потом пятая — прямые API-вызовы превращаются в клубок зависимостей. RabbitMQ между системами разрубает этот клубок. Разбираем, как правильно использовать.

Зачем вообще RabbitMQ

Битрикс24 и 1С могут разговаривать напрямую. Но что если 1С недоступна 5 минут? При прямом вызове заказ потерян. С RabbitMQ — сообщение в очереди, доставится когда 1С вернётся.

Топология очередей

Используем паттерн topic exchange. Для каждого типа события — отдельная очередь.

  • crm.lead.created — новый лид
  • crm.deal.stage_changed — смена стадии сделки
  • erp.invoice.paid — пришла оплата из 1С

Идемпотентность

Сообщение может прийти дважды. Обработчик должен быть идемпотентным. Храним ID уже обработанных сообщений в Redis с TTL 24 часа.

Dead-letter очередь

Если сообщение не удалось обработать 3 раза — в DLQ. Оттуда — в мониторинг, инженер разбирается, что не так. Никогда не теряем данные.

Мониторинг

Метрики: длина очереди, RPS, lag consumer, ошибки. Алерты при аномалиях. Grafana дашборд обязателен.