Система публикации-подписки, сокращение от системы публикации-подписки, представляет собой шаблон обмена сообщениями, используемый в распределенных системах для облегчения связи между компонентами. В этом шаблоне издатели отправляют сообщения в тему или канал, а подписчики получают эти сообщения в зависимости от их интереса к теме. Он обеспечивает слабосвязанную связь между компонентами, при которой издатели и подписчики не знают о существовании друг друга.
Вот пример на Python с использованием популярной системы обмена сообщениями RabbitMQ:
import pika
# Connect to RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Create a topic exchange
channel.exchange_declare(exchange='logs', exchange_type='fanout')
# Create a queue and bind it to the exchange
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='logs', queue=queue_name)
# Define the callback function for receiving messages
def callback(ch, method, properties, body):
print("Received message:", body)
# Start consuming messages
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
print('Waiting for messages...')
channel.start_consuming()
# Close the connection
connection.close()
В этом примере мы создаем систему pub-sub, используя RabbitMQ. Система состоит из издателя, который отправляет сообщения на биржу с именем «logs», и подписчика, который получает сообщения от той же биржи. Обмен имеет тип «разветвление», что означает, что он передает все полученные сообщения всем связанным с ним очередям. Абонент создает анонимную монопольную очередь и привязывает ее к бирже. Функция обратного вызова вызывается при каждом получении сообщения, и в этом примере она просто печатает полученное сообщение.