Для начала небольшие вводные данные:
RabbitMQ — сервер очередей, который позволяет взаимодействовать различным приложениям по протоколу AMQP, который широко используется такими корпорациями Google, Microsoft, NASA, Red Hat, VMware, AT&T.
Сервер очередей RabbitMQ применяется для построения сервисной архитектуры, при которой обработкой ресурсоемких и отложенных задач занимаются следующие выделенные сервисы:
Xero — сервис для ведения бухгалтерии онлайн
Secure Trading — сервис для обработки платежей
RabbitMQ используется для налаживания коммуникации между серверами и является, пожалуй, одним из самых оптимальных решением для этой цели. В нашей компании мы используем эту проверенную технологию в различных проектах, например, в разработке мессенджеров.
В этой статье мы расскажем о применении данного сервера очередей в нашем проекте, конкретнее, построении системы генерации лидов и их продажи клиентам. Также вы можете посмотреть нашу статью об использовании RabbitMQ в разработке мобильных мессенджеров.
Нашим заказчиков была компания, в которой с увеличением числа клиентов очень много времени стало затрачиваться на обслуживание финансовых операций: создание инвойса, запрос на оплату, проверка и подтверждение оплаты.
То есть менеджер должен был вручную сначала собрать информацию по платежам из CRM, составить на основании этой информации инвойсы в Xero, выставить счета клиентам через Secure Trading и только тогда сделать рассылку клиентам с инвойсами а статусами платежей. Выглядел этот процесс следующим образом:
В чем состояла наша задача
Автоматизировать процессы создания инвойсов через стороннее Xero API и рассылки инвойсов через email; сделать автоматическое списание средств с карты пользователя через Secure Trading API.
Решение через cron
Первый блин был комом. Был создан скрипт, который запускался два раза в неделю и совершал необходимые действия в рамках одного процесса. Это накладывало ограничения на общую производительность (длительные ожидания ответов от API). Также любая ошибка на одном из этапов выполнения приводила к завершению работы всего процесса и требовало полный перезапуск скрипта.
Пришли к выводу, что тут необходимо разделить код на несколько независимых процессов с возможностью коммуникации между ними.
Решение через RabbitMQ
Задача была разделена на этапы, которую в свою очередь были преобразованы в независимые процессы:
Подобная архитектура предлагает устойчивое к ошибкам решение, которое можно легко масштабировать (RabbitMQ позволяет процессам общаться между несколькими серверами).
Благодаря удобным инструментам мониторинга для RabbitMQ можно отслеживать ошибки и тестировать каждый процесс отдельно, а использование нескольких независимых процессов позволяет “распараллеливать” задачи и уменьшать время их обработки.
Также дополнительным плюсом стала возможность перевести все ресурсоемкие задачи (генерация отчетов, email рассылки) в отложенную обработку и уменьшить время ожидания ответа для пользователя.
RabbitMQ очень гибкая система, которая работает на базе стандартизированного протокола AMQP, что позволяет обмениваться данными абсолютно разным приложениям: мобильным, веб, десктопным, а также приложениям для встраиваемых устройств.
В этом случае сервер очередей RabbitMQ является отличным выбором и для IoT системы, так как поддерживает легковесный протокол обмена данными MQTT, который широко используется для обмена сообщениями между устройствами.
Для коммуникации между сервисами и фронтендом мы интегрировали программу управления очередями RabbitMQ, что помогло нам перенести сложные задачи на бэкграунд (отправка email, генерация отчетов и т.д.), что значительно увеличило скорость пользовательского интерфейса.
Проект был развернут на Bitbucket и для управления версиями исходного кода был использован Git.
looks good!
We will process the request and contact you.
Now fill in information about yourself: