distributed-computing/tasks/zinoveva-ad/lab_4/README.md
2023-12-16 21:04:41 +04:00

118 lines
3.3 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/#/
![](pic/Screenshot_7.jpg)
Туториал 1:
![](pic/Screenshot_1.jpg)
![](pic/Screenshot_2.jpg)
![](pic/Screenshot_3.jpg)
Туториал 2:
![](pic/Screenshot_4.jpg)
![](pic/Screenshot_5.jpg)
![](pic/Screenshot_8.jpg)
Туториал 3:
![](pic/Screenshot_9.jpg)
![](pic/Screenshot_10.jpg)
![](pic/Screenshot_11.jpg)
## Разработка демонстрационных приложений
Предметная область: Дополнительный соглашения и договоры на проживание.
Разработаны три приложения, согласно предметной области.
1. Publisher
```py
import pika
import time
import random
collection = ["the employment document", "The document is agreed", "Signatures are provided", "the employee is accepted"]
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='Agreements', exchange_type='fanout')
while True:
message = f"Message: {random.choice(collection)}"
channel.basic_publish(exchange='Agreements', 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='Agreements', 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='Agreements', queue=queue_name)
channel.basic_consume(queue=queue_name, on_message_callback=process_message, auto_ack=True)
print('Ожидание сообщений...')
channel.start_consuming()
```
## Результаты выполнения лабораторной работы
Результат отработки Consumer_1:
![](pic/Screenshot_16.jpg)
![](pic/Screenshot_13.jpg)
Результат отработки Consumer_2:
![](pic/Screenshot_17.jpg)
![](pic/Screenshot_15.jpg)
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений.