RabbitMQ, Python и Windows. Step By Step

Публикация № 962723

Разработка - Системная интеграция - Внешние источники данных

rabbitmq python windows

Работа с шиной 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_queueconsume_queueexchange и 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 службы установлены. Наш обмен готов. Спасибо за внимание!

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. s_vidyakin 13.12.18 17:18 Сейчас в теме
а если 1С не шмогла обработать файл, как сказать отдавшей стороне что надо его исправить и повторить выгрузку?
2. kuzyara 1002 13.12.18 19:44 Сейчас в теме
(1) транспорт новый, а протокол то старый ;)
И раз, и два.
w.r.; CSiER; +2 Ответить
3. w.r. 570 14.12.18 07:37 Сейчас в теме
(1)

(2)

Именно такая реализация у меня есть - обмен сделан через план обмена с контролем по номеру принятого и отправленного сообщений. То есть контроль работает на стороне 1С.

RabbitMQ для меня просто транспорт сообщений между системами.

Хотя можно реализовать аналогичный функционал (записывать номера принятого и отправленного сообщений) в свойство headres в properties

Метод basic_publish для отправки:

properties=pika.BasicProperties(delivery_mode=2,headers={'MessageNo':1, 'ReceivedNo':1})


Метод callback для получения

MessageNo = properties.headers['MessageNo']
ReceivedNo= properties.headers['ReceivedNo']
4. minimajack 62 14.12.18 08:23 Сейчас в теме
time.sleep(body.count(b'.')/100)
- дичь
А что будет если службу 1С приостановили?
5. w.r. 570 14.12.18 08:29 Сейчас в теме
(4) значит сообщение не обработается в 1С и система 2 отправит его снова вместе с новыми данными, потому что от 1С не придет ответа о его обработке
6. hazyaka 12.03.19 09:37 Сейчас в теме
Хочу понять чем обыкновенный ftp хуже? или почтовый сервер?
7. w.r. 570 12.03.19 20:21 Сейчас в теме
(6) поддержка очереди сообщений + можно одно сообщение нескольким потребителям отдавать
8. vis_tmp 30 25.04.20 14:08 Сейчас в теме
Никак не могу найти, есть ли возможность для 7.7 использовать Rabbit MQ ?
Оставьте свое сообщение

См. также

Кэширование COM-соединения. Три способа Промо

Практика программирования Перенос данных из 1С7.7 в 1C8.X Внешние источники данных WEB v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    39566    0    YPermitin    33    

Как мы загружаем данные в "Центр управления кассами Магнита"

Внешние источники данных Интеграция v8 1cv8.cf Бесплатно (free)

Статья о том, как мы делали механизм загрузки больших объемов данных в "Центр управления кассами Магнита"

08.05.2020    3142    0    chernenko_vv    23    

Интеграция СуперОкна7 и УНФ

Интеграция Внешние источники данных v8 УНФ Россия Бесплатно (free)

Изучаем базу данных СуперОкна7, смотрим возможности передачи и получения информации.

08.05.2020    948    0    vostok1.dz    2    

Синхронизация БИТ:СКУД 8 с Parsec.Net 2.5

Интеграция Внешние источники данных v8 1cv8.cf Бесплатно (free)

Настройка синхронизации БИТ:СКУД 8 с Parsec.Net.2.5, выгрузка данных из внешней системы контроля доступа.

04.05.2020    2828    0    RPGrigorev    0    

Перенос данных из учетных программ Парус в конфигурации 1С Промо

Внешние источники данных v7.7 v8 БП2.0 ЗУП2.5 ЗКБУ БГУ 1С7:Бух 1С7:ЗиК 1С7:ББУ Россия БУ Госбюджет Бесплатно (free)

Статья посвящена анализу процессов переноса данных из учетных программ Парус в конфигурации 1С.

05.11.2012    50051    0    sklowsky    16    

Получение данных из Сигур

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Получение данных из СКУД Сигур (без танцов с бубном)

25.12.2019    2800    0    skaoxy    5    

Интеграция решений на 1С и сервиса обмена данными RabbitMQ через Web REST API

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Отправка "Hello world" из 1С на сервер RabbitMQ и обратно при помощи web REST API. Проще уже некуда! Совместимо с Linux и Windows! Реализация протестирована на 1С 8.3.14.1854 (x64).

21.10.2019    10844    0    Eret1k    24    

Выгрузка из 1С номенклатуры со штрихкодами без программирования

Загрузка и выгрузка в Excel Внешние источники данных v8 УТ11 Россия Бесплатно (free)

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    7988    0    user1114182    4    

Сканируем без сканера или MXL to JPG Промо

Внешние источники данных Универсальные функции Печатные формы документов v8 1cv8.cf Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    32552    0    shakmaev    47    

Вставка BLOB в таблицы ORACLE средствами 1С 8.х с использованием Microsoft OLEDB Provider

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Столкнулся с необходимостью выгружать картинки из 1С 8 в ORACLE-таблицу.

08.08.2019    3802    0    nomad_irk    0    

Выгрузка данных в таблицу MS SQL SERVER

Внешние источники данных v8 Бесплатно (free)

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER через COM.

02.07.2019    6190    0    EvgenSav    17    

1С и компьютерное зрение: новый подход к контролю за ассортиментом магазина

Розничная торговля Внешние источники данных Розничная торговля v8 1С:Франчайзи, автоматизация бизнеса УУ Бесплатно (free)

Машинное зрение в магазинах и 1С. Как поднять эффективность торгового предприятия (магазин. кафе, шоурум и т.д.) с совершенно неожиданной стороны? Как получить реальные демографические данные покупателей и, самое главное, как это использовать в повседневной работе магазина? Как можно расширить привычные ABC и XYZ анализ, добавив в них пласт данных о трафике и демографии покупателей? Что необходимо для 1С, чтобы использовать данные видеоанализа людского трафика?

20.06.2019    7773    0    osipov_cvizi    16    

Интеграция решений на 1С и сервиса обмена данными RabbitMQ

Внешние источники данных v8 1cv8.cf Бесплатно (free)

"Hello world" из 1С на сервер RabbitMQ и обратно. Полностью открытый код 1С! Реализация протестирована на 1С 8.3.12.1714 (x64).

24.04.2019    15610    0    Eret1k    51    

MS Access и 1С. Что, когда и зачем?

Практика программирования Внешние источники данных Разработка v8 Бесплатно (free)

Об использовании MS Access в связке с 1С. Можно ли использовать продукты Office на сервере. Когда Access может быть полезен. Примеры работы и другое.

09.04.2019    25024    0    YPermitin    32    

RabbitMQ + Конвертация Данных 3.0

Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

Предлагаем ознакомиться с хронологией проекта, проследить ход мыслей от снятия потребностей до реализации, и решить, удалось ли проектной команде найти оптимальное архитектурное решение под конкретный кейс заказчика путем совмещения двух известных, но до сих пор не пересекавшихся технологий, и получилось ли сложить плюсы и устранить минусы каждой из них.

21.03.2019    22409    0    barelpro    82    

Загрузка ЭЛН (электронных листов нетрудоспособности) из файлов

Внешние источники данных Зарплата Зарплата v8 УПП1 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Что делать, если по каким-то причинам нет возможности разместить 1С и Крипто-Про на одном рабочем месте? Правильно - открывать конфигуратор и пилить. Благо, там не сложно. Непосредственно решение для УПП 1.3. Для ЗиК 2.5 и Комплексной автоматизации должно быть аналогично.

07.02.2019    5602    0    SatanClaws    4    

Работа с кассой Atol через веб-сервер ДТО-10

Внешние источники данных ККМ Фискальный регистратор Кассовые операции Кассовые операции v8 Россия НДС Бесплатно (free)

Поддержка многопользовательской печати на одном устройстве ККТ. Поддержка изменений в законодательстве (Переход на ФФД 1.05 и НДС 20%).

31.12.2018    28916    0    medangel    41    

Из 1С в IIKO: Передаем перемещения УТ в приходные накладные

Внешние источники данных Оптовая торговля Оптовая торговля v8 УТ11 Рестораны, кафе и фаст-фуд УУ Бесплатно (free)

Рассмотрение вариантов передачи документа "Перемещение товаров" из Управление торговлей 11 в документ "Приходная накладная" IIKO.

12.09.2018    7576    0    oyti    7    

IIKO (Айко). Обмениваемся накладными с 1С

Внешние источники данных v8 БП3.0 Рестораны, кафе и фаст-фуд БУ УУ Бесплатно (free)

Типовое решение от компании Айко по передаче данных в 1С Бухгалтерию не всегда удовлетворяет реалиям бизнес-процессов организации. Попробуем поразмышлять о том, как реализовать двунаправленный обмен с Айко в фоне.

01.06.2018    13802    0    oyti    19    

Юридически значимый электронный документооборот с Контур.Диадок

Внешние источники данных v8 НУ НДС Бесплатно (free)

Пример использования компоненты DiadocComApi http://diadocsdk-1c.readthedocs.io/ru/latest/

31.05.2018    11285    0    savostin.alex    8    

Интеграция Zimbra и 1С

Внешние источники данных Управление взаимоотношениями с клиентами (СRM) Управление взаимоотношениями с клиентами (СRM) v8 Россия УУ Бесплатно (free)

В публикации описывается способ интеграции 1С с почтовым сервером Zimbra, используя SOAP сервис. Рассматривать вопрос интеграции будем на примере бизнес задачи, из блока CRM. Реализации общей адресной книги(GAL-Global Address List) между сотрудниками. Сотрудники(компания) ведет весь учет в 1С, в том числе и элементы CRM, а Zimbra выступает лишь в роли почтового сервиса. Сделать данную публикация побудило отсутствие в интернете готовых примеров совместной работы 1С и Zimbra. Надеюсь, она поможет кому-либо сократить время на реализацию похожей задачи.

16.04.2018    11066    0    Гексагон    17    

Обмен сведениями о пособиях с ФСС для Зарплата и Управление персоналом 2.5.129.3

Внешние источники данных Зарплата Зарплата v8 v8::СПР ЗУП2.5 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Ошибка отправки файла при обмене сведениями о пособиях с ФСС. Зарплата и Управление Персоналом, редакция 2.5 (2.5.129.3).

06.03.2018    17846    0    Igorexa    30    

Загрузка данных из DocsVision

Внешние источники данных v8 Бесплатно (free)

Необходимо было реализовать загрузку данных из программы документооборота "DocsVision 5" в "1С:Документооборот 8". Данное описание оставляю больше для себя, чтобы не забыть, ну и, может, еще кому поможет, т.к. не нашел нигде нормального описания.

17.01.2018    8794    0    apxi    4    

Создание мобильного клиента 1С на Android с использованием HTTP-сервисов

Внешние источники данных Мобильная разработка v8 v8::Mobile Бесплатно (free)

Краткий курс по созданию мобильного приложения на Android, который связывается с сервером 1С через HTTP-сервис. Публикация рассчитана на тех, кто хорошо знаком с программированием на платформе 1С и владеет основами программирования на платформе Android (умеет создавать Activity и знает, как устроена структура проекта).

03.11.2017    32013    0    cdiamond    15    

Как сделать конфигурацию «1С:Предприятие 8» приложением QuickBooks. Проходим авторизацию OAuth 1.0a+OpenID 2.0

Внешние источники данных Практика программирования v8 Бесплатно (free)

Пришло время, когда интеграция со сторонними организациями и их приложениями стала необходимостью для успешного ведения бизнеса. В этой статье будет рассмотрено прохождение авторизации OAuth 1.0a+OpenID 2.0 и превращение конфигурации «1С:Предприятие 8» в приложение QuickBooks.

10.09.2017    20086    0    pbazeliuk    28    

Редактирование пользовательских полей в Битрикс24 через REST API

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Меняем значения пользовательских полей в Битрикс24 через REST API на примере редактирования контактов

06.02.2017    14640    0    user662672_explorer2000    2    

Нагрузочное тестирование сервера 1С при использовании WEB сервисов

Производительность и оптимизация (HighLoad) Внешние источники данных WEB v8 ИТ-компания Бесплатно (free)

Проведение нагрузочного тестирования WEB-сервисов, развернутых на платформе 1С. Целью тестирования является ознакомление с возможностями платформы 1С при работе с большим количеством запросов через опубликованные WEB сервисы на IIS 7.5

01.02.2017    26728    0    BraunAlex    34    

Передаем контакты из 1С в Битрикс24 через REST API

Внешние источники данных v8 УТ11 Россия Бесплатно (free)

Хочу поделиться опытом использования Битрикс24 REST API для экспорта контактов из 1С УТ 11

09.01.2017    51759    0    user662672_explorer2000    111    

Используем механизмы обмена данными БСП для произвольного обмена

Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем) v8 Бесплатно (free)

Механизм БСП заточен на обмен XML по правилам обмена. Чтобы использовать его для любого другого обмена, коих в мире немало, требуются доработки. В статье описан вариант, как из положения выйти.

23.08.2016    32623    0    Патриот    28    

Технология проведения миграции данных в крупных проектах

Внешние источники данных Перенос данных из 1C8 в 1C8 v8 Бесплатно (free)

В статье систематизируется проектный опыт проведения миграции данных в крупных проектах, связанных с переходом Заказчиков на работу в конфигурациях «1С:Предприятие 8».

17.05.2016    31625    0    cinimex    26    

7 причин, почему интеграцию необходимо строить на очередях. Практика RabbitMQ. Отказ от Zato ESB и OData в 1С

Внешние источники данных v8 Бесплатно (free)

Этот набросок является продолжение предыдущей статьи "7 причин, почему интеграция стала приятной. Не упускайте ряд потрясающих возможностей". В большей части это описание боли, через которую пришлось пройти на практике, используя сервисную шину данных Zato ESB и OData протокол совместно с «1С:Предприятие 8».

18.03.2016    63180    0    pbazeliuk    129    

1C + ЭДО Мегафон

Практика программирования Внешние источники данных v8 1cv8.cf Бесплатно (free)

Тестируем модуль обмена 1С с ЭДО Мегафон (модуль прилагается пользователям ресурса ЭДО Мегафон бесплатно).

1 стартмани

21.12.2015    13525    0    JetBrain    4    

Linq to ODATA

Внешние источники данных v8 1cv8.cf Бесплатно (free)

1С сейчас совершенствует REST интерфейс приложения, автоматически генерируемый платформой, и протокол обмена ODATA версии 3. С недавнего времени появилась возможность обмениваться, используя JSON. На просторах интернета мало информации по использованию Linq для ODATA для 1С. Поэтому решил поделиться опытом. Это продолжение статей https://infostart.ru/public/402433/

29.09.2015    31710    0    Serginio    11    

1С Предприятие 8.2: Обмен данными между базами на основе инструментов SQL

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Обмен данными (сотрудники организаций) между базами (1С Предприятие 8.2: Бухгалтерия и 1С Предприятие 8.2: Зарплата и управление персоналом) на основе триггера SQL, отслеживающего изменения таблицы

06.11.2013    21659    0    jan27    25    

Алгоритм выгрузки из 1С в Access

Практика программирования Внешние источники данных v8 Россия Бесплатно (free)

Работающий алгоритм выгрузки из 1С в Access. Понадобилось выгрузить отчет в ACCESS, пришлось разбираться.

31.10.2013    30004    0    dimens    10    

Организация обмена с прочими программами через XML. Имитация двухстороннего обмена без именения конфигурации

Внешние источники данных Обмен через XML v8 Бесплатно (free)

Настраиваем обмен типовой конфигурации со сторонними базами данных, с функционалом двустороннего обмена

24.04.2013    14754    0    Stim213    6    

Подсистема "COMExchange": прямой доступ к EXCEL через ADO

Файловые протоколы обмена, FTP Загрузка и выгрузка в Excel Внешние источники данных v8 1cv8.cf УТ10 УПП1 Россия Бесплатно (free)

На примере этой, очень популярной, темы наглядно продемонстрированы нетривиальные возможности консоли запросов в составе подсистемы: 1. использование событий выполнения запроса (в том числе для запуска на выполнение других запросов) 2. запуск на выполнение запроса в цикле с подстановкой значений параметров из таблицы значений.

20.01.2013    23525    0    yuraos    7    

Простой TCP сервер с обработкой событий на стороне 1С

Практика программирования Внешние источники данных v8 1cv8.cf Бесплатно (free)

В моей работе все чаще и чаще встречаются задачи связи 1С и стороннего оборудования / промышленного софта. В большинстве случаев есть некая внешняя компонента для связи с этим всем. Но эта компонента стоит денег. Плюс не каждого устроит «черный ящик», который что то крутит в себе, и выдает готовый результат. Данная статья в «картинках» покажет как можно реализовать TCP сервер для связи с чем либо «своими руками».

05.12.2012    29526    0    VoDo    8    

Работа с PerCo своими силами

Внешние источники данных Учет рабочего времени Учет рабочего времени v8 1cv8.cf Россия Бесплатно (free)

Сейчас предлагаются различные готовые модули для работы PerCo с 1С. Но не всегда решение простых задач требует установки дополнительного модуля. Рассмотрим подключение для создания и изменения карт сотрудников.

03.10.2012    30178    0    Nas'ka    24    

1С Конвертация, использование внешнего источника данных

Внешние источники данных v8 КД Бесплатно (free)

Загрузка информации в базу данных платформы 1С 8.2 из внешних источников с помощью "Конвертации данных"

26.09.2012    48316    0    SergeMalikov    30    

Инструкция по подключению 1С к IBM DB2 с помощью внешнего источника данных.

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Краткая инструкция по работе с внешними источниками данных - подключение 1C к IBM DB2 с помощью внешнего источника данных через ODBC драйвер.

17.09.2012    11480    0    RomaLut    4    

Загрузка материалов из программы Командор Дизайнер в 1С: Бухгалтерия 8.

Пользователю системы Загрузка и выгрузка в Excel Внешние источники данных Учет ТМЦ Учет ТМЦ v8 БП2.0 Россия БУ Бесплатно (free)

Komandor Designer - программа для проектирования шкафов купе. Ее используют многие предприятия, которые производят мебель. Также они используют для учета программу 1С. Поэтому возникает проблема обмена данными между этими программами. Что важно для плодотворного общения двух людей — правильно — они должны понимать друг друга, разговаривать на одном языке. То же правило и в нашем случае, программы должны одинаково правильно понимать, какой материал находится в заказе, расходе сырья по заказу.

22.08.2012    11062    0    knigula    1