diff --git a/antonov_dmitry_lab4/README.md b/antonov_dmitry_lab4/README.md index 1086524..0c48996 100644 --- a/antonov_dmitry_lab4/README.md +++ b/antonov_dmitry_lab4/README.md @@ -17,6 +17,7 @@ # Запуск Проект запускается в ide просто по нажатию у питон файла на функцию мейн. +Нужно последовательно запустить функцию мейн у файлов app.py, consumer1.py, consumer2.py. Очередь сообщений запускается такой командой docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management @@ -30,28 +31,37 @@ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-manag Оба врача принимают пациентов. -Flask-приложение с RabbitMQ, использующего библиотеку pika для publisher и Celery для consumers. -Приложение Flask (app.py), издателя (publisher.py) и двух потребителей (consumer.py). -Потребители реализованы как задачи Celery. Можно запускать приложение Flask -и обоих потребителей отдельно в разных терминалах. +Flask-приложение с RabbitMQ, использующего библиотеку pika для publisher и для consumers. +Надо обязательно вызвать метод publish, иначе никакого приема пациентов не начнется. +Приложение Flask (app.py), для источника пациентов (publisher) и двух врачей-потребителей (consumer1.py и consumer2.py). +Запускаем приложение Flask и обоих потребителей запускаем отдельно в разных терминалах. Consumer ы будут прослушивать сообщения, опубликованные publisher ом.

-

App
- +
Главное приложение источник приема пациентов
+

-

Consumer
- -

-

-

Publisher
- +
Прибытие пациентов
+

RabbitMQ
- + +

+

+

Врач 1
+ +

+

+

Врач 2
+ +

+

+

Отчет ui
+

-# Ссылка на видео -https://disk.yandex.ru/i/3o4aLuqp1EpbJg + +# Ссылка на видео +https://disk.yandex.ru/i/-6Ecl5T28IGmFA diff --git a/antonov_dmitry_lab4/img.png b/antonov_dmitry_lab4/img.png new file mode 100644 index 0000000..caa83b1 Binary files /dev/null and b/antonov_dmitry_lab4/img.png differ diff --git a/antonov_dmitry_lab4/rabbitmq/app.py b/antonov_dmitry_lab4/rabbitmq/app.py index bbd53fe..ebf9b8b 100644 --- a/antonov_dmitry_lab4/rabbitmq/app.py +++ b/antonov_dmitry_lab4/rabbitmq/app.py @@ -1,19 +1,18 @@ from flask import Flask, render_template, request -from publisher import publish_message +from publisher import publish_messages app = Flask(__name__) @app.route('/') def index(): - return render_template('index.html') + return "это publisher" @app.route('/publish', methods=['GET']) def publish(): - message = request.form['message'] - publish_message(message) - return 'Пациент прибыл: {}'.format(message) + publish_messages() + return 'Начало приема пациентов' if __name__ == '__main__': diff --git a/antonov_dmitry_lab4/rabbitmq/consumer1.py b/antonov_dmitry_lab4/rabbitmq/consumer1.py index b2d94dc..49b9ff3 100644 --- a/antonov_dmitry_lab4/rabbitmq/consumer1.py +++ b/antonov_dmitry_lab4/rabbitmq/consumer1.py @@ -1,18 +1,19 @@ import pika + def callback(ch, method, properties, body): - print(" [x] Врач 1 принимает пациента '{}'".format(body.decode())) + print("Врач 1 принимает пациента '{}'".format(body.decode())) + def consume_messages(): - connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost', # RabbitMQ server hostname - port=5672, # RabbitMQ server port - credentials=pika.PlainCredentials('guest', 'guest') # credentials - )) + connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() + + exchange_name = 'logs' channel.queue_declare(queue='example_queue') + channel.queue_bind(exchange=exchange_name, queue='example_queue') channel.basic_consume(queue='example_queue', on_message_callback=callback, auto_ack=True) - print(' [*] Врач 1 ожидает приема') + print('Врач 1 ожидает приема') try: channel.start_consuming() except KeyboardInterrupt: @@ -20,6 +21,6 @@ def consume_messages(): channel.stop_consuming() connection.close() + if __name__ == '__main__': consume_messages() - diff --git a/antonov_dmitry_lab4/rabbitmq/consumer2.py b/antonov_dmitry_lab4/rabbitmq/consumer2.py index 70d05f3..87bf4d9 100644 --- a/antonov_dmitry_lab4/rabbitmq/consumer2.py +++ b/antonov_dmitry_lab4/rabbitmq/consumer2.py @@ -1,16 +1,17 @@ import pika + def callback(ch, method, properties, body): - print(" [x] Врач 2 принимает пациента '{}'".format(body.decode())) + print("Врач 2 принимает пациента '{}'".format(body.decode())) + def consume_messages(): - connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost', # RabbitMQ server hostname - port=5672, # RabbitMQ server port - credentials=pika.PlainCredentials('guest', 'guest') # credentials - )) + connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() + + exchange_name = 'logs' channel.queue_declare(queue='example_queue') + channel.queue_bind(exchange=exchange_name, queue='example_queue') channel.basic_consume(queue='example_queue', on_message_callback=callback, auto_ack=True) print(' Врач 2 ожидает пациента') try: @@ -20,6 +21,6 @@ def consume_messages(): channel.stop_consuming() connection.close() + if __name__ == '__main__': consume_messages() - diff --git a/antonov_dmitry_lab4/rabbitmq/publisher.py b/antonov_dmitry_lab4/rabbitmq/publisher.py index 84f8e5d..c1e7040 100644 --- a/antonov_dmitry_lab4/rabbitmq/publisher.py +++ b/antonov_dmitry_lab4/rabbitmq/publisher.py @@ -1,20 +1,19 @@ import pika import time -def publish_message(message): - connection = pika.BlockingConnection(pika.ConnectionParameters( - host='localhost', # RabbitMQ server hostname - port=15672, # RabbitMQ server port - credentials=pika.PlainCredentials('guest', 'guest') # credentials - )) + +def publish_messages(): + connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() + + exchange_name = 'logs' + channel.exchange_declare(exchange=exchange_name, exchange_type='fanout') channel.queue_declare(queue='example_queue') - channel.basic_publish(exchange='', routing_key='example_queue', body=message) # Отдаем сообщение в 'logs' exchange каждую секунду while True: message = "Пациент прибыл" # Сообщение channel.basic_publish(exchange='logs', routing_key='', body=message) - print(f" [x] Отправлено сообщение: {message}") + print(f"Отправлено сообщение: {message}") time.sleep(1) - print(" [x] Отправлено '{}'".format(message)) + print("Отправлено '{}'".format(message)) connection.close() diff --git a/antonov_dmitry_lab4/screens/img_1.png b/antonov_dmitry_lab4/screens/img_1.png index 2474c9a..999b42e 100644 Binary files a/antonov_dmitry_lab4/screens/img_1.png and b/antonov_dmitry_lab4/screens/img_1.png differ diff --git a/antonov_dmitry_lab4/screens/img_3.png b/antonov_dmitry_lab4/screens/img_3.png new file mode 100644 index 0000000..5cafb2d Binary files /dev/null and b/antonov_dmitry_lab4/screens/img_3.png differ diff --git a/antonov_dmitry_lab4/screens/img_4.png b/antonov_dmitry_lab4/screens/img_4.png new file mode 100644 index 0000000..caa83b1 Binary files /dev/null and b/antonov_dmitry_lab4/screens/img_4.png differ diff --git a/antonov_dmitry_lab4/screens/img_5.png b/antonov_dmitry_lab4/screens/img_5.png new file mode 100644 index 0000000..739eb31 Binary files /dev/null and b/antonov_dmitry_lab4/screens/img_5.png differ