DAS_2023_1/senkin_alexander_lab_4/README.md

4.2 KiB
Raw Permalink Blame History

Лабораторная работа №4 - Работа с брокером сообщений

Цель: изучение проектирования приложений при помощи брокера сообщений.

Задачи:

  • Установить брокер сообщений RabbitMQ.
  • Пройти уроки 1, 2 и 3 из RabbitMQ Tutorials на любом языке программирования.
  • Продемонстрировать работу брокера сообщений.

Kafka и RabbitMQ

Kafka - брокер сообщений, работающий по схеме глупый брокер, умный консьюмер, то есть продюсер пушит сообщение на сервер kafka, а подписчики сами берут сообщения из пула. Kafka используют для потоковой передачи информации без сложной маршутиризации, но с максимальной пропускной способность.

RabbitMQ - брокер сообщений, работающий по схеме умный брокер, глупый консьюмер, то есть продюсер пушит сообщение на сервер RabbitMQ, а подписчики получают сообщения от сервера. RabbitMQ обеспечивает эффективную доставку сообщений в рамках сложных сценариев маршутиризации.

Разработка трех распределенных приложений

Было решено не разрабатывать заново микросервисы а взять существующую реализованную распределенную систему. В ней реализовано 3 сервиса: Сервис Ресторана, Сервис Пользователей, Сервис Статистики. В этом приложении реализована работа с брокером kafka, Сервис пользователя - продюсер, Сервисы ресторана и статистики - подписчики.

Приложение разработано на языке Go.

Работа программы

  • Скачиваем kafka и zookeper например локально на машину и запускаем их: img_1.png
  • Пользователь после создания заказа отправляет сообщение с информацией о заказе на сервер kafka. Часть кода создания подключения продюсера к серверу: img_2.png
  • Сервисы ресторана и статистики, в которых kafka работает в фоновом режиме, берут новые сообщения о заказах из сервера и обрабатывают их. Часть кода подключения подписчиков к серверу: img_3.png
  • Запускаем все сервисы и смотрим работу программы. Для начала создаем заказ из сервиса пользователя и отправляем его на сервер kafka: img_4.png img_5.png
  • Далее сервисы ресторана и статистики берут в отдельном потоке сообщения с сервера. Консоль сервиса ресторана: img_6.png
  • Консоль сервиса статистики: img_7.png
  • В базе данных также поменялось количество заказов двух сервисов, в ресторане было 20 записей, стало 21, а на сервисе статистики было 29, стало 30: img_8.png img_9.png
  • Можно подвести итог, что система работает успешно и kafka выполняет назначенные ей функции.

Видео

Видео с разбором лабораторной работы - https://youtu.be/w-F-fWRN3ig