Files
2023-10-27 18:48:55 +03:00
..
2023-10-27 18:48:55 +03:00
2023-10-27 18:48:55 +03:00
2023-10-27 18:48:55 +03:00

Пример взаимодействия приложений через RabbitMQ

В примере демонстрируется:

  • использование @Scheduled таймера для имитации пользовательской активности
  • оправка и прием сообщений между двумя приложениями через RabbitMQ
  • создание и отправка email сообщений средствами SpringMail
  • аггрегация данных с помощью SpringData/JPQL
  • создание кастомного endpoint-а actuator-а для вывода статистики

Описание примера:

user-activity-emitter-microservice:

  • по таймеру UserActivityEmitterService достает из БД случайный тип активности и пользователя
  • после чего формирует из них объект активности (UserActivity) и отправляет в очередь сообщений RabbitMQ с помощью RabbitTemplate настроенный на работу с "main-exchange"
  • *большее число активностей имеют routingKey = "user.activity.message.simple" *
  • *активности, у которых в названии типа есть вхождение "Вредн" имееют свой routingKey (" user.activity.message.important") *
  • так же приложение по таймеру, с помощью ActivityStatCalculationEmitterSerivce инициирует подсчет статистики с помощью отправки сообщения в очередь RabbitMQ c routingKey = "user.activity.stat"

user-activity-processor-microservice:

  • в приложении для обработки сообщений есть несколько очередей, куда попадают сообщения в зависимости от routingKey
  • их прослушивает компонент RabbitMqListener, который содержит по методу на каждую очередь"
  • в "all-activity-queue" попадают все активности. На выходе из данной очереди активности сохраняются в БД
  • в "important-activity-queue" попадают важные активности. На выходе из данной очереди активности преобразуются в письма и отправляются на почту администратору
  • *в "stat-calc-commands-queue" попадают команды, которые инициируют расчет статистики. *
  • в методе-обработчике сообщений данной очереди происходит удаление старых статистических данных, а так же подсчет и сохранение в БД новых
  • за вывод статистических данных отвечает кастомный endpoint actuator-а ActivityStatEndpoint

Для работы приложений требуется работающий RabbitMQ. За его запуск отвечает docker-compose.yml Адрес консоли RabbitMQ: http://localhost:15672/ Логин и пароль: guest