70 lines
4.1 KiB
Markdown
70 lines
4.1 KiB
Markdown
|
# Лабораторная работа №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.
|
|||
|
|
|||
|
# Publisher
|
|||
|
<p>
|
|||
|
<div>Код Publisher</div>
|
|||
|
<img src="screens/img1.png" width="650" title="Код Publisher">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Работа Publisher</div>
|
|||
|
<img src="screens/img2.png" width="650" title="Работа Publisher">
|
|||
|
</p>
|
|||
|
|
|||
|
# Consumer 1
|
|||
|
|
|||
|
<p>
|
|||
|
<div>Код Consumer 1</div>
|
|||
|
<img src="screens/img3.png" width="650" title="Код Consumer 1">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Работа Consumer 1</div>
|
|||
|
<img src="screens/img4.png" width="650" title="Работа Consumer 1">
|
|||
|
</p>
|
|||
|
|
|||
|
# Consumer 2
|
|||
|
|
|||
|
<p>
|
|||
|
<divКод Consumer 2</div>
|
|||
|
<img src="screens/img5.png" width="650" title="Код Consumer 2">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Работа Consumer 2</div>
|
|||
|
<img src="screens/img6.png" width="650" title="Работа Consumer 2">
|
|||
|
</p>
|
|||
|
|
|||
|
# RabbitMQ Management UI
|
|||
|
|
|||
|
<p>
|
|||
|
<div>До запусков Consumer</div>
|
|||
|
<img src="screens/img7.png" width="650" title="До запусков Consumer">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>После запуска Consumer 1</div>
|
|||
|
<img src="screens/img8.png" width="650" title="После запуска Consumer 1">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>После запуска Consumer 2</div>
|
|||
|
<img src="screens/img9.png" width="650" title="После запуска Consumer 2">
|
|||
|
</p>
|
|||
|
|
|||
|
Вывод: по данным об очередях с RabbitMQ Management UI видно, что второй Consumer работает быстрее и ограничен лишь скоростью отправки сообщений, но если скорость отправки сообщений не будет ограничена, то возникает риск пропуска сообщений, а также такой метод сильнее нагружает систему и усложняет отслеживания работоспособности системы, что может привести к сбоям.
|
|||
|
|
|||
|
# Видео
|
|||
|
|
|||
|
Видео с разбором лабораторной работы - https://youtu.be/8GOG8MyPkO4
|