distributed-computing/tasks/zinoveva-ad/lab_4/README.md

118 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

2023-12-16 20:09:40 +04:00
# Отчет по лабораторной работе №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
2023-12-16 21:04:41 +04:00
collection = ["the employment document", "The document is agreed", "Signatures are provided", "the employee is accepted"]
2023-12-16 20:09:40 +04:00
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:
2023-12-16 21:04:41 +04:00
![](pic/Screenshot_16.jpg)
2023-12-16 20:09:40 +04:00
![](pic/Screenshot_13.jpg)
Результат отработки Consumer_2:
2023-12-16 21:04:41 +04:00
![](pic/Screenshot_17.jpg)
2023-12-16 20:09:40 +04:00
![](pic/Screenshot_15.jpg)
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений.