Короткий ответ
- Готовых, широко распространённых «plug‑and‑play» модулей для коробочного Битрикс24, которые прямо из коробки «подключают» RabbitMQ/Kafka и автоматически создают лиды/контакты — фактически нет (по состоянию на 2024).
- Обычно интеграцию реализуют как лёгкий кастомный модуль/демон на PHP, использующий стандартные PHP‑библиотеки для работы с брокером (php‑amqplib, Enqueue, Symfony Messenger или php‑rdkafka) и Bitrix API (локально через prolog или через REST).
Что реально встречается на практике
- На маркетплейсе и у интеграторов иногда продаются коммерческие решения «интеграция с очередью/AMQP» — но они чаще являются обёртками/шаблонами под конкретную задачу, а не полноценными универсальными «из коробки» решениями. Поэтому типичный подход — взять готовую PHP‑библиотеку для брокера и написать небольшой consumer/службу, которая вызывает API Битрикса.
Рекомендация по архитектуре для вашей задачи
1. Сайт отправляет сообщения в очередь (JSON) в RabbitMQ (exchange + routing key).
2. На сервере с коробочным Битриксом запускаете отдельный consumer — это не Agent Битрикса (Agents выполняются во время веб‑запросов и не подходят для долгоработающих задач), а системный демон/systemd‑сервис или cron‑запуск CLI‑скрипта.
3. Consumer: читает сообщения, валидация → идемпотентная обработка (внешний id) → создаёт/обновляет контакты/лиды/сделки через локальный API (подключая prolog_before.php и вызывая CCrm*/CUser*), либо через REST‑методы коробочного Битрикс24 (если предпочтительнее).
4. Обработка ошибок: ack/nack, retry, DLQ (dead‑letter), логирование и мониторинг.
Какие библиотеки/инструменты взять
- Для RabbitMQ:
- php-amqplib/php-amqplib — простая и популярная библиотека AMQP для PHP.
- enqueue/* или symfony/messenger + amqp/AMQPLib‑транспорт — дают удобную архитектуру обработчиков, middleware, retry.
- Для Kafka:
- ext‑librdkafka + edenhill/php-rdkafka — быстрый, но требует установки расширения и больше операционных усилий.
- Bitrix‑часть:
- Локальное включение prolog_before.php и использование CCrmLead::Add, CCrmContact::Add и т.п. — быстрее и даёт больше контроля.
- Или REST API коробочного сервера (требуется корректная аутентификация и учёт лимитов).
Какой брокер выбрать — RabbitMQ или Kafka?
- RabbitMQ — чаще подходит для вашей описанной задачи:
- Лёгкий в настройке и эксплуатации, хорошая поддержка AMQP в PHP без дополнительных C‑расширений.
- Поддерживает устойчивую доставку (persistent messages, ack/nack), DLQ, маршрутизацию.
- Идеален при умеренной нагрузке (сообщения раз в минуту, пиковые волны).
- Kafka — хорош, если требуется очень высокая пропускная способность, длительное хранение событий и возможность «реплея» большого потока событий:
- Сложнее в эксплуатации и требует php‑клиентов с нативной библиотекой (librdkafka).
- Лучше, если ожидается масштабирование до тысяч/десятков тысяч сообщений в секунду или нужен большой «event log».
Практические советы и подводные камни
- Идемпотентность: всегда перед созданием/обновлением проверяйте внешний id, чтобы избежать дублирования при повторной доставке.
- Выбор места выполнения Bitrix API: если consumer на той же машине, локальные вызовы через prolog быстрее и не зависят от REST‑лимитов; но тогда скрипт должен корректно подключать ядро и выполнять операции под нужным пользователем/правами.
- Не используйте long‑running Agents для постоянного прослушивания очереди — лучше systemd demon/cron + CLI.
- Реализуйте DLQ, экспоненциальный backoff для ретраев и мониторинг (alert на рост очереди/ошибки).
- Тестируйте нагрузку и транзакции: создание лидов/сделок — тяжёлые операции, делайте батчи/лимиты обработок в секунду, чтобы не перегружать CRM.
Как быстрее запустить MVP
- RabbitMQ + php‑amqplib, простой CLI‑consumer в виде systemd‑службы, consumer подтягивает prolog и вызывает CCrmLead::Add; реализовать idempotency по внешнему id и DLQ.
- Если хочется быстрее разработать бизнес‑логику и reuse: использовать Symfony Messenger или Enqueue — меньше шаблонного кода.
Заключение
- «Готовых» массовых модулей именно под коробочный Битрикс24 и RabbitMQ/Kafka — немного, чаще предлагают кастомные решения от интеграторов.
- Для вашей задачи рекомендую RabbitMQ + PHP‑consumer (systemd‑демон) с использованием php‑amqplib или Symfony Messenger/Enqueue и вызовом локального Bitrix API; это простое, надёжное и поддерживаемое решение.
Если хотите — могу:
- прислать пример простого consumer‑скрипта (шаблон) для php‑amqplib, который подключает prolog и создаёт лид; или
- подсказать, какие параметры очереди/обменников/TTL/DLQ настроить для более устойчивой работы.