115 lines
3.2 KiB
Markdown
115 lines
3.2 KiB
Markdown
|
# Отчет по лабораторной работе №4
|
|||
|
|
|||
|
Выполнила студентка гр. ИСЭбд-41 Островская С. Ф.
|
|||
|
|
|||
|
## Прохождение tutorial
|
|||
|
|
|||
|
Установила rabbitMQ server, erlang и зашла в брокер под гостем по http://localhost:15672/#/
|
|||
|
![](pic/pic1.jpg)
|
|||
|
|
|||
|
Туториал 1:
|
|||
|
|
|||
|
![](pic/pic2.jpg)
|
|||
|
![](pic/pic3.jpg)
|
|||
|
|
|||
|
Туториал 2:
|
|||
|
|
|||
|
![](pic/pic4.jpg)
|
|||
|
![](pic/pic5.jpg)
|
|||
|
|
|||
|
Туториал 3:
|
|||
|
|
|||
|
![](pic/pic6.jpg)
|
|||
|
![](pic/pic7.jpg)
|
|||
|
|
|||
|
## Разработка демонстрационных приложений
|
|||
|
|
|||
|
Предметная область: Дополнительный соглашения и договоры на проживание.
|
|||
|
Разработаны три приложения, согласно предметной области.
|
|||
|
|
|||
|
1. Publisher
|
|||
|
|
|||
|
```py
|
|||
|
import pika
|
|||
|
import time
|
|||
|
import random
|
|||
|
|
|||
|
collection = ["Application for accommodation in a dormitory", "Rector's order", "Conclusion of an agreement", "Check-into a dormitory"]
|
|||
|
|
|||
|
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/pic8.jpg)
|
|||
|
![](pic/pic9.jpg)
|
|||
|
|
|||
|
Результат отработки Consumer_2:
|
|||
|
|
|||
|
![](pic/pic10.jpg)
|
|||
|
![](pic/pic11.jpg)
|
|||
|
|
|||
|
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений.
|