Как установить соединение RabbitMQ, чтобы сообщения по очередям расскидывались?

Для установки соединения с RabbitMQ и настройки распределения сообщений по очередям вам понадобится прежде всего установить библиотеку RabbitMQ для Python.

Установка RabbitMQ для Python может быть выполнена с помощью менеджера пакетов pip. Откройте командную строку и введите следующую команду:

pip install pika

После успешной установки библиотеки pika вы можете начать писать код для установки соединения с RabbitMQ.

Прежде всего, импортируйте модуль pika:

import pika

Для установления соединения с RabbitMQ, создайте соответствующий объект connection с помощью функции pika.BlockingConnection(). В качестве аргументов передайте параметры подключения, такие как имя хоста и порт.

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost', port=5672))

Замените 'localhost' на имя вашего хоста RabbitMQ, а 5672 на соответствующий порт.

Для создания канала связи используйте метод connection.channel(). Данный канал будет использоваться для отправки и получения сообщений.

channel = connection.channel()

При создании очереди, указывается имя и дополнительные параметры (если необходимо). Например, в следующем коде создается очередь с именем task_queue, которая будет распределять сообщения между несколькими получателями:

channel.queue_declare(queue='task_queue', durable=True)

Обратите внимание на использование параметра durable, который указывает, что очередь должна быть сохранена даже после перезапуска сервера.

После создания очереди, вы можете начать публиковать сообщения в эту очередь с помощью метода channel.publish(). Например, отправка сообщения Hello, world!:

channel.basic_publish(exchange='', routing_key='task_queue', body='Hello, world!')

В данном примере, параметр exchange не указывается, что означает использование прямого обмена сообщениями. Аргумент routing_key указывает на имя очереди, в которую будет отправлено сообщение.

Если вы хотите, чтобы сообщения автоматически распределялись между несколькими получателями, то укажите в опциях очереди параметр x-max-length-bytes равным нулю:

channel.queue_declare(queue='task_queue', durable=True, arguments={'x-max-length-bytes': 0})

Это позволит RabbitMQ автоматически распределять сообщения между доступными потребителями.

Получение сообщений из очереди может быть выполнено с помощью метода basic_consume(). Этот метод принимает в качестве аргументов имя callback-функции, которая будет вызвана при получении сообщения, и имя очереди.

В следующем примере показано, как получить сообщение из очереди с именем task_queue и обработать его в callback-функции callback():

def callback(ch, method, properties, body):
    print("Received message: %r" % body)

channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=True)

channel.start_consuming()

В данном примере, параметр auto_ack установлен в True, что означает, что сообщения будут автоматически подтверждены при получении.

Таким образом, после установки соединения с RabbitMQ и настройки распределения сообщений по очередям, вы сможете успешно публиковать и получать сообщения между различными клиентами.