DAS_2023_1/antonov_dmitry_lab4/README.md
2023-12-05 12:35:35 +04:00

68 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №4 - Работа с брокером сообщений
Изучение проектирования приложений при помощи брокера сообщений.
# Задачи
Необходимо выбрать предметную область и разработать следующие приложения:
* Publisher. Программа, которая создаёт один exchange с типом fanout. Программа должна раз в секунду генерировать сообщения в журнал событий согласно вашей предметной области. Например, событие "пришёл заказ" или "сообщение от пользователя" или "необходимо создать отчёт".
* Consumer 1. Программа, которая создаёт под себя отдельную не анонимную (!) очередь (queue) (то есть имя queue НЕ пустая строка), создаёт binding на exchange и начинает принимать сообщения (consume). Программа должна обрабатывать сообщения 2-3 секунды. Можно реализовать через обычный Thread.Sleep (для C#).
* Consumer 2. Аналогично Consumer 1, только сообщения необходимо обрабатывать моментально. Только имя очереди должно отличаться от Consumer 1.
Далее необходимо собрать и запустить приложения одновременно по одному экземпляру.
Сделать в отчёте вывод о скорости обработки consumer-ами событий от publisher-а. Для этого можно посмотреть заполненность созданных очередей. А для этого можно использовать скриншот из RabbitMQ Management UI.
Запустить несколько копий Consumer 1. Проверить заново заполненность очередей через UI.
# Запуск
Проект запускается в ide просто по нажатию у питон файла на функцию мейн.
Нужно последовательно запустить функцию мейн у файлов app.py, consumer1.py, consumer2.py.
Очередь сообщений запускается такой командой
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
# Описание работы:
Развернули два приложения
Сервисы используем из предыдущей работы
Предметная область - врачи и пациенты
1. Consumer 1 - врач 1:
2. Consumer 2 - врач 2:
Оба врача принимают пациентов.
Flask-приложение с RabbitMQ, использующего библиотеку pika для publisher и для consumers.
Надо обязательно вызвать метод publish, иначе никакого приема пациентов не начнется.
Приложение Flask (app.py), для источника пациентов (publisher) и двух врачей-потребителей (consumer1.py и consumer2.py).
Запускаем приложение Flask и обоих потребителей запускаем отдельно в разных терминалах.
Consumer ы будут прослушивать сообщения, опубликованные publisher ом.
<p>
<div>Главное приложение источник приема пациентов</div>
<img src="screens/img.png" width="650" title="Главное приложение">
</p>
<p>
<div>Прибытие пациентов</div>
<img src="screens/img_1.png" width="650" title="Прибытие пациентов">
</p>
<p>
<div>RabbitMQ</div>
<img src="screens/img_2.png" width="650" title="RabbitMQ">
</p>
<p>
<div>Врач 1</div>
<img src="screens/img_3.png" width="650" title="Врач 1">
</p>
<p>
<div>Врач 2</div>
<img src="screens/img_4.png" width="650" title="Врач 2">
</p>
<p>
<div>Отчет ui</div>
<img src="screens/img_5.png" width="650" title="Отчет ui">
</p>
# Ссылка на видео
https://disk.yandex.ru/i/-6Ecl5T28IGmFA