Files
Spring/examples/spring-mail-rabbitmq-demo
2021-10-29 16:09:36 +04:00
..
2021-10-29 16:09:36 +04:00
2021-07-24 00:50:17 +04:00
2020-01-15 20:22:29 +04:00
2021-01-27 15:16:39 +04: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