Каталог решений - RabbitMQ, Python и Windows. Step By Step

RabbitMQ, Python и Windows. Step By Step

RabbitMQ, Python и Windows. Step By Step

В наличии

Работа с шиной RabbitMQ, используя Python на Windows. Пошаговый быстрый старт.

Категория:

Описание

Здравствуйте! Хочу поделиться своим опытом написания на языке Python служб для работы с шиной RabbitMQ. Видел много публикаций, в тч и на этом ресурсе, с реализацией на C#. Я решил пойти по более простому и короткому пути — не интегрировать отправку и получения сообщений в 1С. 1С у меня занимается только генерацией файлов обмена. Всю остальную работу уже делают службы Windows, написанные на Python.

Ну что ж, приступим…

Для начала установил я Python с оф сайта ссылка для Windows.

Далее с помощью системы управления пакетами pip нужно установить пакет для работы с RabbitMQ — pika. В командной строке CMD нужно ввести команду:

pip install pika

После установки пакета можно приступать к написанию скриптов на Python.

Сред для разработки на Python очень много. Лично я использовал JetBrains PyCharm Community Edition ссылка. После установки нужно создать проект и пару файлов .py. Один из файлов будет службой отправки сообщений, другой — получения из RabbitMQ.

1. Пример файла sender.py для службы отправки сообщения:

#!/usr/bin/env python
import pika, os, sys

# имя файла обмена для отправки в RMQ
fileName = "d:/to_rabbit.xml"

credentials = pika.PlainCredentials('user_name', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('host_name',
                                                               5672,
                                                               '/',
                                                               credentials))
channel = connection.channel()

# создаем очередь с заданным именем для отправки
channel.queue_declare(queue='send_queue', durable=True)

while True:
    # если файл существует, осуществляем отправку
    if os.path.isfile(fileName):

        file = open(fileName, "r", encoding="utf-8")
        messageBody = file.read()
        file.close()

        channel.basic_publish(exchange='exchange',
                              routing_key='key',
                              body=messageBody,
                              properties=pika.BasicProperties(delivery_mode=2,)
                              )

        #удалим файл после отправки
        os.remove(fileName)

2. Пример файла consumer.py для получения сообщения:

#!/usr/bin/env python
import pika, time, sys

# имя файла, который будем забирать для обработки в 1С
fileName = "d:/from_rabbit.xml"

credentials = pika.PlainCredentials('user_name', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('host_name',
                                                               5672,
                                                               '/',
                                                               credentials))
channel = connection.channel()

# забираем из очереди 
channel.queue_declare(queue='consume_queue', durable=True)

def callback(ch, method, properties, body):
    file = open(fileName, "w", encoding="utf-8")
    file.write(body.decode("utf-8"))
    file.close()
    # время ожидания чтобы на стороне 1С успел обработаться файл
    time.sleep(body.count(b'.')/100)
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_qos(prefetch_count=1)

channel.basic_consume(callback,
                      queue='consume_queue')

channel.start_consuming()

Параметры user_name, password, host_name, send_queue,  consume_queue,  exchange и key нужно задать самостоятельно.

Лично я использовал 2 очереди для обмена сообщений: одна для отправки send_queue, другая для получения consume_queue. Так же в консоли RabbitMQ нужно не забыть забиндить (Bind) наши очереди на наш обмен exchange.

 

Все, скрипты готовы. Осталось совсем чуть-чуть — создать на их основании службы для отправки и получения. Для этого я использовал утилиту nssm ссылка.

Качаем, распаковываем и создаем службы:

1. Служба для отправки (команда в CMD):

d:\nssm-2.24\win64>nssm.exe install SenderRMQ

2. Служба для получения (команда в CMD):

d:\nssm-2.24\win64>nssm.exe install ConsumerRMQ

После нажатия Install service службы установлены. Наш обмен готов. Спасибо за внимание!

has been added to your cart:
Оформление заказа