mirror of
https://github.com/OtusTeam/Spring.git
synced 2026-05-30 10:50:42 +00:00
3.3 KiB
3.3 KiB
Пример взаимодействия приложений через 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 croutingKey= "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