distributed-computing/tasks/lyamzina-ma/lab_4/README.md
2023-12-18 16:41:19 +04:00

113 lines
3.0 KiB
Markdown
Raw Permalink 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
Выполнил студентка гр. ИСЭбд-41 Лямзина М.А.
## Прохождение tutorial
Установил rabbitMQ server, erlang и зашел в брокер под гостем по http://localhost:15672/#/
Туториал 1:
![](picture/1.png)
![](picture/2.png)
![](picture/3.png)
Туториал 2:
![](picture/4.png)
Туториал 3:
![](picture/5.png)
## Разработка демонстрационных приложений
Предметная область: Организация мероприятий.
Разработа три приложения согласно предметной области.
1. Publisher
```py
import pika
import time
import random
collection = ["Types of events", "Event venues", "Event management services", "Event participants"]
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='Event', exchange_type='fanout')
while True:
message = f"Message: {random.choice(collection)}"
channel.basic_publish(exchange='Event', routing_key='', body=message)
time.sleep(1)
connection.close()
```
2. Consumer 1.
```py
import pika
import time
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
time.sleep(3)
print("Сообщение успешно обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Event', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений...')
channel.start_consuming()
```
3. Consumer 2.
```py
import pika
def process_message(ch, method, properties, body):
print(f"Получено сообщение: {body}")
print("Сообщение успешно обработано")
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='Event', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений...')
channel.start_consuming()
```
## Результаты выполнения лабораторной работы
Результат отработки Consumer_1:
![](picture/6.png)
Результат отработки Consumer_2:
![](picture/7.png)
![](picture/8.png)
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений.