113 lines
3.2 KiB
Markdown
113 lines
3.2 KiB
Markdown
|
# Отчет по лабораторной работе №4
|
||
|
Выполнила студентка группы ИСЭбд-41 Клементьева Жанна Андреевна
|
||
|
|
||
|
|
||
|
Порядок действий:
|
||
|
1. Установила rabbitMQ server, erlang
|
||
|
2. Зашла в брокер под гостем по http://localhost:15672/#/
|
||
|
|
||
|
Урок №1:
|
||
|
|
||
|
![](pic/1.png)
|
||
|
![](pic/2.png)
|
||
|
|
||
|
Урок №2:
|
||
|
|
||
|
![](pic/2t1.png)
|
||
|
|
||
|
Урок №3:
|
||
|
|
||
|
![](pic/task.png)
|
||
|
|
||
|
## Разработка демонстрационных приложений
|
||
|
Так как необходимо было выбрать предметную область, мой выбор остановился на:
|
||
|
Договора на платное внедрение системы менеджмента качества на предприятиях.
|
||
|
|
||
|
|
||
|
Далее было разработано три приложения:
|
||
|
|
||
|
1. Publisher
|
||
|
|
||
|
```py
|
||
|
import pika
|
||
|
import time
|
||
|
import random
|
||
|
|
||
|
collection = ["Application for the implementation of a quality management system", "The contract is completed", "Enrollment order completed", "System implemented"]
|
||
|
|
||
|
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/4.png)
|
||
|
|
||
|
Результат Consumer_2:
|
||
|
|
||
|
![](pic/5.png)
|
||
|
![](pic/klementeva_consumer2.png)
|
||
|
|
||
|
Вывод: таким образом, Consumer_1 нагружает больше, чем Consumer_2. Также он принимает сообщения гораздо медленнее.
|