Какие шаги нужно предпринять, чтобы достичь быстрого обмена сообщениями между скриптами на Python с помощью RabbitMQ?

Приветствую, друзья! Как дела у всех?
  • 11 января 2024 г. 9:10
Ответы на вопрос 2
Приведу инструкцию по созданию быстрого обмена сообщениями между скриптами Python с помощью RabbitMQ. RabbitMQ - это популярный брокер сообщений, который использует протокол AMQP для асинхронного обмена сообщениями.

### Установка RabbitMQ

1. Установите RabbitMQ на свою систему. Например, на Ubuntu это можно сделать так:

   ```sh
   sudo apt-get update
   sudo apt-get install rabbitmq-server
   ```

   Для других операционных систем следуйте официальной инструкции по установке на сайте RabbitMQ.

2. После установки запустите сервер RabbitMQ:

   ```sh
   sudo systemctl start rabbitmq-server
   ```

   Проверьте статус сервера командой:

   ```sh
   sudo systemctl status rabbitmq-server
   ```

### Настройка Python и библиотек

1. Установите библиотеку `pika`, которая является Python клиентом для RabbitMQ:

   ```sh
   pip install pika
   ```

### Создание скрипта Python для отправки сообщений (producer.py)

1. Импортируйте библиотеку `pika`:

   ```python
   import pika
   ```

2. Установите соединение с сервером RabbitMQ:

   ```python
   connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
   channel = connection.channel()
   ```

3. Declare a queue where messages will be sent:

   ```python
   channel.queue_declare(queue='hello')
   ```

4. Отправьте сообщение в очередь:

   ```python
   message = "Hello World!"
   channel.basic_publish(exchange='',
                         routing_key='hello',
                         body=message)
   print(f" [x] Sent {message}")
   ```

5. Закройте соединение:

   ```python
   connection.close()
   ```

### Создание скрипта Python для получения сообщений (consumer.py)

1. Повторите шаги 1-3 из раздела *Создание скрипта Python для отправки сообщений*.

2. Добавьте функцию обратного вызова для обработки приходящих сообщений:

   ```python
   def callback(ch, method, properties, body):
       print(f" [x] Received {body}")
   ```

3. Настройте подпись на очередь и начните получать сообщения:

   ```python
   channel.basic_consume(queue='hello',
                         auto_ack=True,
                         on_message_callback=callback)
   
   print(' [*] Waiting for messages. To exit press CTRL+C')
   channel.start_consuming()
   ```

### Запуск скриптов

1. Сначала запустите `consumer.py` чтобы начать слушать сообщения:

   ```sh
   python consumer.py
   ```

2. Теперь запустите `producer.py` чтобы отправить сообщение:

   ```sh
   python producer.py
   ```

Когда `producer.py` будет запущен, он отправит сообщение в очередь, и `consumer.py` должен его получить и вывести на экран.

Убедитесь, что RabbitMQ запущен и функционирует правильно, также проверьте, что сетевой порт 5672 (стандартный порт AMQP) не блокируется файрволом. Это обеспечит быстрый обмен сообщениями между скриптами Python с использованием RabbitMQ.
Во-первых, сетевые задержки - у вас несколько серверов 
Во-вторых, сам python немного медленный (может сервер не самый мощный, в нормальных серверах не должно быть проблемой)
В-третьих, прдьюсер постоянно создает новые обменники и очереди
В-четвертых, нужно время на подтверждение обработки запроса ( await message.ack() )
Похожие вопросы