diff --git a/yakovleva_yulia_lab_4/Consumer1.py b/yakovleva_yulia_lab_4/Consumer1.py new file mode 100644 index 0000000..f11b6bf --- /dev/null +++ b/yakovleva_yulia_lab_4/Consumer1.py @@ -0,0 +1,43 @@ +import pika +import random +import time +from datetime import datetime + +queue_name = 'queue1' +exchange = 'logs' + +def callback(ch, method, properties, body): + received_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + message = body.decode() + + print(f"[{received_time}] Потребитель 1: сообщение - '{message}'") + + # Имитация обработки сообщения + time.sleep(random.choice([1, 2])) + + print(f"[{received_time}] Потребитель 1: сообщение '{message}' обработано\n") + + ch.basic_ack(delivery_tag=method.delivery_tag) + +def setup_connection(): + connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + channel = connection.channel() + + channel.queue_declare(queue=queue_name) + + channel.queue_bind(exchange=exchange, queue=queue_name) + + return connection, channel + +if __name__ == '__main__': + connection, channel = setup_connection() + try: + print("[*] Ожидание сообщений") + channel.basic_consume(queue=queue_name, on_message_callback=callback) + channel.start_consuming() + except KeyboardInterrupt: + print("Остановка...") + finally: + if connection.is_open: + connection.close() + print("Соединение закрыто.") diff --git a/yakovleva_yulia_lab_4/Consumer2.py b/yakovleva_yulia_lab_4/Consumer2.py new file mode 100644 index 0000000..f3d5c71 --- /dev/null +++ b/yakovleva_yulia_lab_4/Consumer2.py @@ -0,0 +1,36 @@ +import pika +from datetime import datetime + +queue_name = 'queue2' +exchange = 'logs' + +def callback(ch, method, properties, body): + received_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + message = body.decode() + print(f"[{received_time}] Потребитель 2: пришло сообщение '{message}'") + print(f"[{received_time}] Потребитель 2: сообщение '{message}' обработано\n") + + ch.basic_ack(delivery_tag=method.delivery_tag) + +def setup_connection(): + connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + channel = connection.channel() + + channel.queue_declare(queue=queue_name) + + channel.queue_bind(exchange=exchange, queue=queue_name) + + return connection, channel + +if __name__ == '__main__': + connection, channel = setup_connection() + try: + print("[*] Ожидание сообщений") + channel.basic_consume(queue=queue_name, on_message_callback=callback) + channel.start_consuming() + except KeyboardInterrupt: + print("Остановка...") + finally: + if connection.is_open: + connection.close() + print("Соединение закрыто.") diff --git a/yakovleva_yulia_lab_4/Publisher.py b/yakovleva_yulia_lab_4/Publisher.py new file mode 100644 index 0000000..708fb46 --- /dev/null +++ b/yakovleva_yulia_lab_4/Publisher.py @@ -0,0 +1,22 @@ +import pika +import time + +if __name__ == '__main__': + connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) + channel = connection.channel() + channel.exchange_declare(exchange='logs', exchange_type='fanout') + + messages = [ + "Приехал товар", + "Клиент забронировал компьютер", + "Необходимо создать отчет за день" + ] + + try: + while True: + for message in messages: + channel.basic_publish(exchange='logs', routing_key='', body=message) + print(f"Отправлено сообщение: {message}") + time.sleep(1) # Задержка между сообщениями + except KeyboardInterrupt: + connection.close() diff --git a/yakovleva_yulia_lab_4/README.md b/yakovleva_yulia_lab_4/README.md new file mode 100644 index 0000000..6717685 --- /dev/null +++ b/yakovleva_yulia_lab_4/README.md @@ -0,0 +1,33 @@ +# Лабораторная работа №4 - Работа с брокером сообщений + +## Описание +Был установлен брокер сообщений RabbitMQ и выполнены 3 задачи туториала. Было разработано демонстрационное приложение работы с брокером сообщений RabbitMQ по предметной области "Управление компьютерным клубом" + +## Прохождение tutorials: + +tutorial 1 +![результат работы](./images/image1.png) + +tutorial 2 +![результат работы](./images/image2.png) + +tutorial 3 +![результат работы](./images/image3.png) +![результат работы](./images/image4.png) + + +## Демонстрация работы: + +#### При одном запущенном Consumer1 +![результат работы](./images/image5.png) +#### При двух запущенном Consumer1 +![изображение 2](./images/image6.png) +#### При трёх запущенном Consumer1 +![изображение 3](./images/image7.png) +#### Очередь 2 +![изображение 4](./images/image8.png) + +Здесь мы видим, что чем больше запущено обработчиков сообщений, тем меньше они задерживаются в очереди. Также здесь видно, что очередь 2 всегда свободна, так как Consumer2 работает без задержек и сразу обрабатывает сообщения, в отличие от Consumer1, где установлена задержка. + +## Отчет +Работоспособность: [Видео](https://drive.google.com/file/d/175HC9tEV-s5rglFFp4Z4j7MTteocKYrZ/view?usp=sharing) \ No newline at end of file diff --git a/yakovleva_yulia_lab_4/images/image1.jpg b/yakovleva_yulia_lab_4/images/image1.jpg new file mode 100644 index 0000000..77e839c Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image1.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image2.jpg b/yakovleva_yulia_lab_4/images/image2.jpg new file mode 100644 index 0000000..b5710c2 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image2.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image3.jpg b/yakovleva_yulia_lab_4/images/image3.jpg new file mode 100644 index 0000000..134081f Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image3.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image4.jpg b/yakovleva_yulia_lab_4/images/image4.jpg new file mode 100644 index 0000000..004a6e9 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image4.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image5.jpg b/yakovleva_yulia_lab_4/images/image5.jpg new file mode 100644 index 0000000..cfeb6c9 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image5.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image6.jpg b/yakovleva_yulia_lab_4/images/image6.jpg new file mode 100644 index 0000000..de494f6 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image6.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image7.jpg b/yakovleva_yulia_lab_4/images/image7.jpg new file mode 100644 index 0000000..1ad5445 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image7.jpg differ diff --git a/yakovleva_yulia_lab_4/images/image8.jpg b/yakovleva_yulia_lab_4/images/image8.jpg new file mode 100644 index 0000000..14e57e2 Binary files /dev/null and b/yakovleva_yulia_lab_4/images/image8.jpg differ