116 lines
3.3 KiB
Markdown
116 lines
3.3 KiB
Markdown
# Отчет по лабораторной работе №4
|
||
|
||
Выполнил студент гр. ИСЭбд-41 Дунаев О.И.
|
||
|
||
## Прохождение tutorial
|
||
|
||
Установил rabbitMQ server, erlang и зашел в брокер под гостем по http://localhost:15672/#/
|
||
|
||
Туториал 1:
|
||
|
||
![](scrins/tut1.png)
|
||
![](scrins/send.png)
|
||
![](scrins/receive.png)
|
||
Туториал 2:
|
||
|
||
![](scrins/tut2.png)
|
||
![](scrins/newtask.png)
|
||
![](scrins/worker.png)
|
||
|
||
Туториал 3:
|
||
|
||
![](scrins/tut3.png)
|
||
![](scrins/emitlog.png)
|
||
![](scrins/receivelogs.png)
|
||
|
||
## Разработка демонстрационных приложений
|
||
|
||
Предметная область: Дополенительные соглашения и договора на заселение в отель Туристического агентства.
|
||
Разработа три приложения согласно предметной области.
|
||
|
||
1. Publisher
|
||
|
||
```py
|
||
import pika
|
||
import time
|
||
import random
|
||
|
||
collection = ["Application for Travel Agency", "Buying tickets", "Execution of the agreement", "Check-into a hotel"]
|
||
|
||
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:
|
||
|
||
![](scrins/maintask1.png)
|
||
|
||
Результат отработки Consumer_2:
|
||
|
||
![](scrins/maintask2.png)
|
||
|
||
![](scrins/maintask_dop.png)
|
||
|
||
Вывод: Consumer_2 нагружает меньше памяти, чем Consumer_1 и принимает сообщения гораздо быстрее, тем самым не позволяя очереди накапливать огромное количество сообщений. |