Использование RabbitMQ в построении системы генерации лидов

web projects Использование RabbitMQ в построении системы генерации лидов
4.2/5 - (5 голоса)

Для начала небольшие вводные данные:

 
RabbitMQ — сервер очередей, который позволяет взаимодействовать различным приложениям по протоколу AMQP, который широко используется такими корпорациями Google, Microsoft, NASA, Red Hat, VMware, AT&T.

Сервер очередей RabbitMQ применяется для построения сервисной архитектуры, при которой обработкой ресурсоемких и отложенных задач занимаются следующие выделенные сервисы:

 
Xero — сервис для ведения бухгалтерии онлайн

Secure Trading — сервис для обработки платежей

 
RabbitMQ используется для налаживания коммуникации между серверами и является, пожалуй, одним из самых оптимальных решением для этой цели. В нашей компании мы используем эту проверенную технологию в различных проектах, например, в разработке мессенджеров.

В этой статье мы расскажем о применении данного сервера очередей в нашем проекте, конкретнее, построении системы генерации лидов и их продажи клиентам. Также вы можете посмотреть нашу статью об использовании RabbitMQ в разработке мобильных мессенджеров.

Нашим заказчиков была компания, в которой с увеличением числа клиентов очень много времени стало затрачиваться на обслуживание финансовых операций: создание инвойса, запрос на оплату, проверка и подтверждение оплаты.

То есть менеджер должен был вручную сначала собрать информацию по платежам из CRM, составить на основании этой информации инвойсы в Xero, выставить счета клиентам через Secure Trading и только тогда сделать рассылку клиентам с инвойсами а статусами платежей. Выглядел этот процесс следующим образом:

 

rabbitmq 1

 

В чем состояла наша задача

Автоматизировать процессы создания инвойсов через стороннее Xero API и рассылки инвойсов через email; сделать автоматическое списание средств с карты пользователя через Secure Trading API.

 
Решение через cron

Первый блин был комом. Был создан скрипт, который запускался два раза в неделю и совершал необходимые действия в рамках одного процесса. Это накладывало ограничения на общую производительность (длительные ожидания ответов от API). Также любая ошибка на одном из этапов выполнения приводила к завершению работы всего процесса и требовало полный перезапуск скрипта.

Пришли к выводу, что тут необходимо разделить код на несколько независимых процессов с возможностью коммуникации между ними.

 
 
rabbitmq 2

 
Решение через RabbitMQ
 
Задача была разделена на этапы, которую в свою очередь были преобразованы в независимые процессы:
 

    1. Сбор информации об инвойсах, которые необходимо создать на стороне Xero
    2. Отправка инвойсов в Xero
    3. Отправка инвойсов на почту пользователей.
    4. Автоматическое списание средств с карты пользователя через
    5. Email с уведомлением о списании или о невозможности списания средств (нет привязанной карты, недостаточно средств). <

 
 

rabbitmq 3
 
Подобная архитектура предлагает устойчивое к ошибкам решение, которое можно легко масштабировать (RabbitMQ позволяет процессам общаться между несколькими серверами).

Благодаря удобным инструментам мониторинга для RabbitMQ можно отслеживать ошибки и тестировать каждый процесс отдельно, а использование нескольких независимых процессов позволяет “распараллеливать” задачи и уменьшать время их обработки.

Также дополнительным плюсом стала возможность перевести все ресурсоемкие задачи (генерация отчетов, email рассылки) в отложенную обработку и уменьшить время ожидания ответа для пользователя.

 
rabbitmq 4

 
RabbitMQ очень гибкая система, которая работает на базе стандартизированного протокола AMQP, что позволяет обмениваться данными абсолютно разным приложениям: мобильным, веб, десктопным, а также приложениям для встраиваемых устройств.

В этом случае сервер очередей RabbitMQ является отличным выбором и для IoT системы, так как поддерживает легковесный протокол обмена данными MQTT, который широко используется для обмена сообщениями между устройствами.

Для коммуникации между сервисами и фронтендом мы интегрировали программу управления очередями RabbitMQ, что помогло нам перенести сложные задачи на бэкграунд (отправка email, генерация отчетов и т.д.), что значительно увеличило скорость пользовательского интерфейса.

Проект был развернут на Bitbucket и для управления версиями исходного кода был использован Git.

4.2/5 - (5 голоса)
×