43 lines
1.9 KiB
Python
43 lines
1.9 KiB
Python
import random
|
||
import time
|
||
import pika
|
||
|
||
# Конфигурационные параметры очереди и обменника
|
||
queue_name = 'очередь 1'
|
||
exchange = 'logs'
|
||
|
||
def callback(ch, method, properties, body):
|
||
"""
|
||
Функция обратного вызова, которая вызывается при получении сообщения
|
||
Args:
|
||
ch: канал связи с RabbitMQ
|
||
method: метаданные сообщения (доставка, routing key и т.д.)
|
||
properties: свойства сообщения (заголовки, тип контента и т.д.)
|
||
body: тело сообщения (полезная нагрузка)
|
||
"""
|
||
print(f" Consumer_1: сообщение получено {body.decode()}")
|
||
|
||
time.sleep(random.choice([2, 3]))
|
||
|
||
print(f" Consumer_1: сообщение обработано")
|
||
|
||
# Подтверждаем успешную обработку сообщения
|
||
# Это важно для надежной доставки - сообщение удаляется из очереди только после подтверждения
|
||
ch.basic_ack(delivery_tag=method.delivery_tag)
|
||
|
||
if __name__ == '__main__':
|
||
# Устанавливаем соединение с RabbitMQ сервером на localhost
|
||
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
|
||
|
||
# Создаем канал для взаимодействия с RabbitMQ
|
||
channel = connection.channel()
|
||
|
||
try:
|
||
channel.queue_declare(queue=queue_name)
|
||
channel.queue_bind(exchange=exchange, queue=queue_name)
|
||
channel.basic_consume(queue=queue_name, on_message_callback=callback)
|
||
channel.start_consuming()
|
||
|
||
except KeyboardInterrupt:
|
||
print("\nЗавершение работы потребителя...")
|
||
connection.close() |