Compare commits
No commits in common. "7f5ad611b500fd248f02569ec3cb90469a9d8af9" and "014088a385d29c4cb0c580f455086fb1def1f96b" have entirely different histories.
7f5ad611b5
...
014088a385
Before Width: | Height: | Size: 312 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 374 KiB |
Before Width: | Height: | Size: 62 KiB |
@ -1,24 +0,0 @@
|
|||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
channel.basic_qos(prefetch_count=1)
|
|
||||||
channel.exchange_declare(exchange='grade_book', exchange_type='fanout')
|
|
||||||
|
|
||||||
result = channel.queue_declare(queue='cool_student', exclusive=True)
|
|
||||||
queue_name = result.method.queue
|
|
||||||
|
|
||||||
channel.queue_bind(exchange='grade_book', queue=queue_name)
|
|
||||||
|
|
||||||
print(' [*] Waiting for logs. To exit press CTRL+C')
|
|
||||||
|
|
||||||
def callback(ch, method, properties, body):
|
|
||||||
print(f" [x] Receive: {body}")
|
|
||||||
print(f" [+] Complete: {body}")
|
|
||||||
ch.basic_ack(delivery_tag=method.delivery_tag)
|
|
||||||
|
|
||||||
channel.basic_consume(
|
|
||||||
queue=queue_name, on_message_callback=callback)
|
|
||||||
|
|
||||||
channel.start_consuming()
|
|
@ -1,31 +0,0 @@
|
|||||||
import random
|
|
||||||
import time
|
|
||||||
|
|
||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.basic_qos(prefetch_count=1)
|
|
||||||
|
|
||||||
channel.exchange_declare(exchange='grade_book', exchange_type='fanout')
|
|
||||||
|
|
||||||
result = channel.queue_declare(queue='normal_student', durable=True)
|
|
||||||
|
|
||||||
queue_name = result.method.queue
|
|
||||||
|
|
||||||
channel.queue_bind(exchange='grade_book', queue=queue_name)
|
|
||||||
|
|
||||||
print(' [*] Waiting for tasks. To exit press CTRL+C')
|
|
||||||
|
|
||||||
def callback(ch, method, properties, body):
|
|
||||||
print(f" [x] Receive: {body}")
|
|
||||||
time.sleep(random.randint(2,4))
|
|
||||||
print(f" [+] Complete: {body}")
|
|
||||||
ch.basic_ack(delivery_tag=method.delivery_tag)
|
|
||||||
|
|
||||||
channel.basic_consume(
|
|
||||||
queue=queue_name, on_message_callback=callback)
|
|
||||||
|
|
||||||
channel.start_consuming()
|
|
@ -1,25 +0,0 @@
|
|||||||
import sys
|
|
||||||
import time
|
|
||||||
|
|
||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.exchange_declare(exchange='grade_book',
|
|
||||||
exchange_type='fanout')
|
|
||||||
|
|
||||||
count = 0
|
|
||||||
while True:
|
|
||||||
count+= 1
|
|
||||||
time.sleep(1)
|
|
||||||
message = f"Homework #{count}"
|
|
||||||
channel.basic_publish(exchange='grade_book',
|
|
||||||
routing_key='',
|
|
||||||
body=message,
|
|
||||||
properties=pika.BasicProperties(
|
|
||||||
delivery_mode=pika.DeliveryMode.Persistent
|
|
||||||
))
|
|
||||||
print(f" [x] Sent {message}")
|
|
||||||
|
|
Before Width: | Height: | Size: 178 KiB |
@ -1,25 +0,0 @@
|
|||||||
import pika, sys, os
|
|
||||||
|
|
||||||
def main():
|
|
||||||
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.queue_declare(queue='hello')
|
|
||||||
|
|
||||||
def callback(ch, method, properties, body):
|
|
||||||
print(f" [x] Received {body}")
|
|
||||||
|
|
||||||
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
|
|
||||||
|
|
||||||
print(' [*] Waiting for messages. To exit press CTRL+C')
|
|
||||||
channel.start_consuming()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
try:
|
|
||||||
main()
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
print('Interrupted')
|
|
||||||
try:
|
|
||||||
sys.exit(0)
|
|
||||||
except SystemExit:
|
|
||||||
os._exit(0)
|
|
@ -1,11 +0,0 @@
|
|||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.queue_declare(queue='hello')
|
|
||||||
|
|
||||||
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
|
|
||||||
print(" [x] Sent 'Hello World!'")
|
|
||||||
connection.close()
|
|
Before Width: | Height: | Size: 362 KiB |
@ -1,18 +0,0 @@
|
|||||||
import sys
|
|
||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.queue_declare(queue='task_queue', durable=True)
|
|
||||||
|
|
||||||
message = ' '.join(sys.argv[1:]) or "Hello World!"
|
|
||||||
|
|
||||||
channel.basic_publish(exchange='',
|
|
||||||
routing_key="task_queue",
|
|
||||||
body=message,
|
|
||||||
properties=pika.BasicProperties(
|
|
||||||
delivery_mode = pika.DeliveryMode.Persistent
|
|
||||||
))
|
|
||||||
print(f" [x] Sent {message}")
|
|
@ -1,29 +0,0 @@
|
|||||||
import time
|
|
||||||
|
|
||||||
import pika, sys, os
|
|
||||||
|
|
||||||
def main():
|
|
||||||
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
channel.basic_qos(prefetch_count=1)
|
|
||||||
channel.queue_declare(queue='task_queue', durable=True)
|
|
||||||
def callback(ch, method, properties, body):
|
|
||||||
print(f" [x] Received {body.decode()}")
|
|
||||||
time.sleep(body.count(b'.'))
|
|
||||||
print(" [x] Done")
|
|
||||||
ch.basic_ack(delivery_tag=method.delivery_tag)
|
|
||||||
|
|
||||||
channel.basic_consume(queue='task_queue', on_message_callback=callback)
|
|
||||||
|
|
||||||
print(' [*] Waiting for messages. To exit press CTRL+C')
|
|
||||||
channel.start_consuming()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
try:
|
|
||||||
main()
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
print('Interrupted')
|
|
||||||
try:
|
|
||||||
sys.exit(0)
|
|
||||||
except SystemExit:
|
|
||||||
os._exit(0)
|
|
Before Width: | Height: | Size: 148 KiB |
@ -1,22 +0,0 @@
|
|||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.exchange_declare(exchange='logs', exchange_type='fanout')
|
|
||||||
|
|
||||||
result = channel.queue_declare(queue='', exclusive=True)
|
|
||||||
queue_name = result.method.queue
|
|
||||||
|
|
||||||
channel.queue_bind(exchange='logs', queue=queue_name)
|
|
||||||
|
|
||||||
print(' [*] Waiting for logs. To exit press CTRL+C')
|
|
||||||
|
|
||||||
def callback(ch, method, properties, body):
|
|
||||||
print(f" [x] {body}")
|
|
||||||
|
|
||||||
channel.basic_consume(
|
|
||||||
queue=queue_name, on_message_callback=callback, auto_ack=True)
|
|
||||||
|
|
||||||
channel.start_consuming()
|
|
@ -1,20 +0,0 @@
|
|||||||
import sys
|
|
||||||
import pika
|
|
||||||
|
|
||||||
connection = pika.BlockingConnection(
|
|
||||||
pika.ConnectionParameters(host='localhost'))
|
|
||||||
channel = connection.channel()
|
|
||||||
|
|
||||||
channel.exchange_declare(exchange='logs',
|
|
||||||
exchange_type='fanout')
|
|
||||||
|
|
||||||
message = ' '.join(sys.argv[1:]) or "Hello World!"
|
|
||||||
|
|
||||||
channel.basic_publish(exchange='logs',
|
|
||||||
routing_key='',
|
|
||||||
body=message,
|
|
||||||
properties=pika.BasicProperties(
|
|
||||||
delivery_mode=pika.DeliveryMode.Persistent
|
|
||||||
))
|
|
||||||
|
|
||||||
print(f" [x] Sent {message}")
|
|
@ -1,44 +0,0 @@
|
|||||||
# Лабораторная работа №4 - Работа с брокером сообщений
|
|
||||||
|
|
||||||
## Прохождение уроков
|
|
||||||
|
|
||||||
Урок №1.
|
|
||||||
![img.png](lesson_1%2Fimg.png)
|
|
||||||
|
|
||||||
Урок №2.
|
|
||||||
![img.png](lesson_2%2Fimg.png)
|
|
||||||
|
|
||||||
Урок №3.
|
|
||||||
![img.png](lesson_3%2Fimg.png)
|
|
||||||
|
|
||||||
Все приложения были разработаны на Python
|
|
||||||
|
|
||||||
## Разработанные приложения
|
|
||||||
В качестве предметной области было выбрано общение учителя и его учеников. Учитель дает задание ученикам, а они их выполняют. Я выделил 2 вида учеников: обычные, которым нужно некоторое время на то, чтобы выполнить задание; крутые ученики, которые выполняют задание моментально, как только получают его.
|
|
||||||
Были созданы следующие приложения:
|
|
||||||
- teacher - программа, которая представляет учителя и отправляет задания ученикам
|
|
||||||
- Student_Normal - программа, которая представялет обычного ученика, получает и обрабатывает, с задержкой, полученные задания.
|
|
||||||
- Student_Cool - программа, которая представялет крутого ученика, получает и моментально обрабатывает полученные задания.
|
|
||||||
Все программы были разработаны на языке Python.
|
|
||||||
Проведенные тесты:
|
|
||||||
#### Тест №1. Запущены 1 учитель, 1 обычный ученик, 1 крутой ученик:
|
|
||||||
![FirstTest.png](Teacher_student_message%2FFirstTest.png)
|
|
||||||
Показатели очереди обычного ученика:
|
|
||||||
![FirstTest_Normal.png](Teacher_student_message%2FFirstTest_Normal.png)
|
|
||||||
Показатели очереди крутого ученика:
|
|
||||||
![FirstTest_Cool.png](Teacher_student_message%2FFirstTest_Cool.png)
|
|
||||||
|
|
||||||
Вывод: одного обычного ученика не хватает на то, чтобы выполнять все полученные в срок, ему тяжело :(
|
|
||||||
Крутому же ученику все дается с легкостью.
|
|
||||||
|
|
||||||
#### Тест №2. Запущены 1 учитель, 4 обычных ученика:
|
|
||||||
![SecondTest.png](Teacher_student_message%2FSecondTest.png)
|
|
||||||
Показатели очереди обычного ученика:
|
|
||||||
![FirstTest_Normal.png](Teacher_student_message%2FFirstTest_Normal.png)
|
|
||||||
Вывод: если 4 обычных ученика объединяться и будут делать задания вместе, то они смогут избежать переполнения очереди заданий.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Запись тестирования
|
|
||||||
Работа приложения представлена в [видео](https://disk.yandex.ru/i/zzwvXXpZhavh7A)
|
|