- Пользователь запрашивает сложный составной отчет (например, отчет по истории подержанного автомобиля от Автотеки).
- Отчет состоит из набора разных блоков данных, каждый из которых представляет собой отдельный мини-отчет (например, список владельцев ТС, история ДТП и т.д.).
- Каждый компонент отчета в виде задания отправляется в соответствующую очередь (у каждого типа компонента своя очередь).
- Специальные обработчики слушают эти очереди и разбирают из них задания для выполнения.
- После выполнения заданий обработчики отправляют результаты в общую результирующую очередь.
- После сбора всех составных частей (из результирующей очереди) итоговый отчет показывается клиенту в веб-интерфейсе.
Предоставляет интерфейс, с которым взаимодействует конечный пользователь. В данном интерфейсе пользователь задает настройки отчета, запускает его построение и получает его результаты.
Служит транспортной системой для передачи заданий/результатов между другими компонентами системы.
Занимаются обработкой заданий в соответствии с заложенной в них бизнес-логикой.
- История и сроки владения (сколько было владельцев)
- Участие в ДТП (в скольких ДТП участвовало данное ТС)
- Наличие ограничений или сведений о розыске
- reports.used-car.accidents (для заданий типа "Участие в ДТП")
- reports.used-car.limits-wanted-info (для заданий типа "Наличие ограничений или сведений о розыске")
- reports.used-car.ownership-history (для заданий типа "История и сроки владения")
- reports.used-car.results (в эту очередь попадают результаты по всем блокам отчета)
- reports.unrouted (в эту очередь попадают все сообщения, не прошедшие маршрутизацию)
- Принимает запрос от пользователя на формирование отчета.
- Формирует и отправляет задание на формирование отчета в обменник "reports.tasks" (в качестве ключа маршрутизации указывается "reports.used-car").
- Получает все сообщения из очереди "reports.used-car.results".
- При получении частей отчетов актуализируется их статус в общем списке отчетов.
- Использует выделенного пользователя "report-used-car-webserver" для работы с RabbitMQ. Может лишь отправлять сообщения с ключем "reports.used-car" в обменник "reports.tasks", а также читать сообщения из очереди "reports.used-car.results".
- Принимают задания из очередей "reports.used-car.*" (каждый обработчик слушает свою очередь).
- Выполняют необходимую бизнес-логику для построения данных блоков отчета.
- Отправляют результаты своей работы в виде сообщений в обменник "reports.results" (в качестве ключа маршрутизации указывается "reports.used-car").
- Используют выделенного пользователя "report-used-car-subreport" для работы с RabbitMQ. Могут лишь отправлять сообщения с ключем "reports.used-car" в обменник "reports.results", а также читать сообщения из всех очередей "reports.used-car.*".
$ docker-compose up -d
- Веб-интерфейс системы будет доступен по адресу: http://localhost:8080/
- Веб-интерфейс RabbitMQ будет доступен по адресу: http://localhost:15672/ (guest/guest)
Проверить работу системы можно по следующему набору VIN-номеров:
- 123456
- 234567
- 345678
- fake-vin