Подсистема интеграции "реального времени" на базе RabbitMQ для 1С

Администрирование - Сервисные утилиты

Подсистема для организации обмена между конфигурациями 1С, а также сторонними системами на любом языке в режиме "реального времени" с помощью концепции Event Driven Architecture. На базе сервера очередей RabbitMQ при помощи протоколов AMQP, MQTT. Codename "Yellow Rabbit MQ"

Мир развивается и всем нужна интеграция

  • Хотите ли Вы передать розничный чек также быстро как это делает оператор фискальных данных ? Причем если Ваш магазин находится в Благовещенске, а центральный сервер в Калининграде ?
  • Вы хотите получать события телеметрии с устройств IoT внутрь Вашей 1С конфигурации по протоколу MQTT, чтобы вести учет в мире "интернета вещей" ?
  • Вы хотите реализовать принципы слабой связанности между своими конфигурациями ? Когда данные передаются с гарантией доставки ?
  • Вы хотите выводить на обслуживание свою "Управление торговлей" и не терять заказы с сайта ?

Yellow Rabbit MQ

Команда "SilverBulleter's" представляет свой новый продукт позволяющий вам добиться интеграции в режиме реального времени, сохранив слабую связанность систем, а также:

  • повторного использования уже разработанной топологии интеграции 
  • возможность вывода отдельных систем на эксплуатацию без потери передаваемых данных
  • обеспечить предпосылки к внедрению шин данных
  • интегрировать в 1С устройства "интернета вещей" посредством моста MQTT-to-AMQP

Причины купить

Подсистема

  • поддерживает работу в режимах высоких нагрузок
  • обеспечивает гарантированность доставки событий с помощью механизма "высокой доступности" серверов RabbitMQ

Позволяет отказаться

  • от обмена в режиме "точка-точка" с помощью низкопроизводительных SOAP и  HTTP сервисов

Полезна для разработчиков

  • повышает компетенцию
  • обеспечивает единый протокол интеграции вне зависимости от языка программирования

Достоинства

Продукт представляет собой:

  • Подсистему для конфигураций на базе 1С Предприятие 8.3 с русскоязычными методами интеграции
  • 1C NativeAPI компоненту на С++ реализующую протокол AMQP включая возможность работы в режиме удаленного вызова процедур (RPC) с английскими именами методов
  • Документацию в формате PDF для подсистемы и компоненты

Состав подсистемы

  • Поддержка асинхронной обработки очередей сообщений
  • Поддержка автоматической регистрации через административный справочник обработчиков
  • Удаленный вызов процедур (RPC) с помощью протокола AMQP
  • Демонстрационную подсистему, позволяющую настроить подключение и передавать сообщения

API подсистемы 1С (Переопределяемые модули)

// Позволяет клиентской конфигурации предоставить параметры соединения с RMQ
//
Процедура ПрисвоитьПараметрыАвторизации(
		Адрес,
		Порт,
		Логин,
		Пароль,
		ВиртуальныйХост
	) Экспорт
	
	// Адрес = www.cloudamqp.com;
	// Порт  = 2672;
	// и т.д.
	

КонецПроцедуры

//////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС ПОЛУЧАТЕЛЯ СООБЩЕНИЙ

// Процедура позволяет конфигурации-потребителю событий зарегистрировать
// свои процедуры обработки сообщений в разрезе имен очередей
//
Процедура ПриРегистрацииОбработчиковСообщений(Знач Обработчики) Экспорт

	// Для регистрации обработчика необходимо использовать следующий код:
	//
	// ПолучениеСообщенийСлужебный.ДобавитьОбработчикСобытия(Обработчики, "rmq.my_queue_name", "МойОбщийМодуль.МойМетодОбработки");
	//
	// Метод обработчика должен параметры:
	//  - ТекстСообщения - Строка. тело принятого сообщения.
	//  - Отказ - Булево. Если признак Отказ будет установлен в Истина, то сообщение считается необработанным и останется в очереди сервера.

КонецПроцедуры

// Процедура позволяет конфигурации-потребителю событий зарегистрировать
// свои процедуры обработки сообщений в разрезе имен очередей
//
Процедура ПриРегистрацииОбработчиковСообщенийАсинх(Знач Обработчики) Экспорт

	// Для регистрации обработчика необходимо использовать следующий код:
	//
	// ПолучениеСообщенийСлужебный.ДобавитьОбработчикСобытияАсинх(Обработчики, "rmq.my_queue_name", "check", "МойОбщийМодуль.МойМетодОбработки");
	//
	// Метод обработчика должен параметры:
	//  - ТекстСообщения - Строка. тело принятого сообщения.
	//  - Отказ - Булево. Если признак Отказ будет установлен в Истина, то сообщение считается необработанным и останется в очереди сервера.
		
КонецПроцедуры


//////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС ОТПРАВИТЕЛЯ СООБЩЕНИЙ

// Возвращает экземпляр класса, публикующего сообщения.
// каждому сообщению назначается адрес доставки.
//
// Параметры:
//  ИмяПубликации - идентификатор потока событий
//                - exchange_name в терминах RMQ
//
// Возвращаемое значение:
//   Класс ИздательСобытий
//
Функция НовыйАдресныйИздатель(Знач ИмяПубликации) Экспорт

	Возврат Обработки.ИздательСобытий.СоздатьПоТипуОбмена(ИмяПубликации, "direct");

КонецФункции // НовыйАдресныйИздатель()

// Возвращает экземпляр класса, публикующего категоризируемые сообщения в exchange
//
// Параметры:
//  ИмяПубликации - идентификатор потока событий
//                - exchange_name в терминах RMQ
//
// Возвращаемое значение:
//   Класс ИздательСобытий
//
Функция НовыйТематическийИздатель(Знач ИмяПубликации) Экспорт

	Возврат Обработки.ИздательСобытий.СоздатьПоТипуОбмена(ИмяПубликации, "topic");

КонецФункции // НовыйИздатель()

Описание методов внешней компоненты

Данный документ содержит перечень методов внешней компоненты и описывает их использование.

В описании параметров в скобках указаны значения по умолчанию (если они есть)

Метод Connect

Предназначен для установки соединения с сервером RMQ

Параметры

  • host - адрес сервера
  • port - порт сервера (5672)
  • user - пользователь ("guest")
  • password - пароль ("guest")
  • vhost - виртуальный хост RMQ ("/")

Метод DeclareExchange

Предназначен для создания новой точки обмена на сервере RMQ.

Параметры

  • name - имя точки обмена
  • type - тип точки обмена: fanout|direct|topic
  • mustExist (false) - не создавать exchange на сервере, если его нет.
  • durable (false) - точка обмена должна кешировать сообщения на диске, на случай падения RMQ
  • auto_delete (false) - точка обмена должна быть удалена когда от нее отсоединятся все очереди

Метод выбрасывает исключение, если mustExist=true и точки с таким именем на сервере не существует.

Метод BasicPublish

Отправляет сообщение в точку обмена

Параметры

  • exchangeName - имя точки обмена
  • routingKey ("") - ключ маршрутизации сообщения (актуально только для topic и direct)
  • message - тело сообщения
  • TTL - время жизни сообщения в миллисекундах
  • isPersistense - является ли персистентным

Метод DeclareQueue

Создает новую очередь на сервере RMQ.

Параметры

  • name - имя объявляемой очереди. Если передать пустую строку, то метод вернет имя, сгенерированное сервером.
  • mustExist (false) - не создавать очередь с таким именем, использовать существующую.
  • durable (false) - кешировать сообщения на диске, на случай падения RMQ.
  • exclusive (false) - только текущее соединение может иметь доступ к этой очереди.
  • auto_delete (false) - удалить очередь если к ней был подключен, а затем отключен читающий клиент.

Возвращаемое значение

Строка. Имя очереди, сгенерированное сервером, или заданное явно в параметре.

Метод BindQueue

Устанавливает связь очереди и точки обмена.

Параметры

  • queue_name - имя очереди
  • exchange_name - имя точки обмена
  • routing_key ("") - ключ маршрутизации. Только сообщения с этим ключом будут попадать в очередь. Для точки обмена topic возможны маски * и #

Метод BasicConsume

Регистрирует читающего клиента (потребителя) на сервере

Параметры

  • queue_name - Имя очереди из которой будем читать.
  • consumer_tag ("") - имя потребителя. Если не задан, то имя потребителя сгенерирует сервер и вернет из метода
  • no_ack (true) - не ждать подтверждения обработки. Сообщения будут удалены из очереди сразу после отправки на клиента.
  • exclusive (false) - монопольно захватить очередь
  • prefetch_count (1) - количество сообщений единовременно отправляемых клиенту. Оптимизационный параметр, если > 1 усложняет программирование клиента.

Возвращаемое значение

Строка. Имя потребителя, сгенерированное сервером, или заданное явно в параметре.

Метод BasicConsumeMessage

Считывает сообщение из очереди. Метод блокирует текущий поток выполнения, пока не будет получено сообщение или не достигнут таймаут.

Параметры

  • consumer_tag - имя потребителя
  • [OUT] result - выходной параметр. Тело сообщения.
  • wait_timeout (-1) - таймаут ожидания сообщения в миллисекундах. -1 означает неограниченное ожидание

Возвращаемое значение

true, если сообщение получено, false, если истек таймаут.

Метод BasicAck

Отсылает серверу подтверждение, что сообщение обработано и его можно удалить.

В API жестко зашит порядок обработки сообщений. Подтвердить можно только последнее прочитанное сообщение. Таким образом, если prefetchCount больше единицы, то отправлять ack нужно по принципу LIFO (стеком).

Если сервер не получает ack, то он не будет отправлять новых сообщений, а в случае обрыва связи - вышлет неподтвержденные сообщения еще раз.

Метод DeleteQueue

Удаляет очередь с сервера

Параметры

  • queue_name - Имя очереди
  • if_unused (false) - удаление будет выполнено, только если очередь не используется
  • if_empty (false) - удаление будет выполнено, только если очередь пуста

Метод DeleteExchange

Удаляет точку обмена с сервера.

Параметры

  • name - имя точки обмена
  • if_unused (false) - удаление будет выполнено, только если точка обмена не используется.

Метод BasicReject

Отказывается от последнего полученного сообщения. Работает по принципу Ack, но в обратную сторону.

Метод BasicCancel

Отписывает потребителя от очереди.

Параметры

  • consumer_tag - имя потребителя

Метод UnbindQueue

Отсоединяет очередь от точки обмена.

Параметры

  • queue_name - имя очереди
  • exchange_name_name - имя точки обмена
  • routing_key - ключ маршрутизации, указанный при создании привязки в методе BindQueue

Метод GetLastError

Метод позволяет обойти невозможность получения текстов исключений в NativeAPI Исключение, брошенное компонентой и перехваченное в 1С не содержит текста ошибки (не предусмотрено NativeAPI).

Вызов этого метода позволяет получить текст последней известной ошибки. Значение последней ошибки обнуляется при очередном успешном вызове любого метода.

Работа со свойствами сообщений

Поддерживаются следующие имена свойств:

  • Priority
  • ReplyTo
  • CorrelationId
  • MessageId

Свойства сообщений можно читать и устанавливать перед отправкой.

Перед отправкой сообщения свойства, которые имеют статус "установленных" передаются в RabbitMQ в качестве атрибутов сообщения.

При получении сообщения все свойства "переустанавливаются" из полученного сообщения, а предыдущие значения - сбрасываются.

Пример:

client.SetProperty("CorrelationId", "corrid-12345");
Сообщить(client.GetProperty("CorrelationId")); // вернет "corrid-12345"
Текст = "";
client.BasicConsumeMessage(consumer_tag, Текст);
// после получения сообщения - все свойства перечитались из него
Сообщить(client.GetProperty("CorrelationId")); // вернет то, что было в сообщении.

Метод PropertyIsSet

Проверяет установлено ли указанное свойство.

Параметры:

  • property_name - имя свойства

Метод GetProperty

Получает значение установленного свойства

Параметры:

  • property_name - имя свойства

Метод SetProperty

Получает значение установленного свойства

Параметры:

  • property_name - имя свойства
  • value - значение свойства

Метод ClearProperties

Сбрасывает все свойства в неустановленное состояние

Дополнительно

Процес разработки в команде "Серебряная Пуля" полностью соответствует концепции CI-CD, то есть

  • имеет близкое к 100% покрытие сценариями поведения BDD кода 1С и С++
  • проверяется каждое изменение кода в режиме "ночной сборки" и перед выпуском очередного релиза
  • релиз подсистемы проверяется на качество кодирования автоматизировано с помощью платформы SonarQube - плагины для С++ и 1С 

Техническая информация

  • проверена работа во всех релизах начиная с 8.2.19 вплоть до 8.3.10
  • компонента поддерживает архитектуры x64 и x32 Windows контуров 1С
    • версия для Linux x32 и x64 на данный момент пилотируется на внутренних проектах и будет выпущена в следующих релизах
  • работа подсистемы проверена на серверах RabbitMQ в режимах
    • простой локальной установки
    • сложной топологии с применением плагинов Federation и Shovel
    • в режиме "высокодоступного кластера"
    • в режимах гибридного кластера с применением облачного сервиса CloudAMQP 

"Часто задаваемые вопросы разработчика"

  • Почему RabbitMQ ?
    • по нашим тестам за последние 4 года совокупная стоимость владения контуром RabbitMQ наиболее низкая из всех серверов реализующих протокол AMQP, а также важный момент - RabbitMQ используется для интеграции телеметрии внутри платформы OpenStack и создавался изначально, чтобы быть максимально производительным в режимах высокой доступности и отказоустойчивости. 
  • Какой формат передачи данных выбрать ?
  • Как мониторить RabbitMQ ?
    • мы советуем использовать уже готовый шаблон Zabbix https://github.com/jasonmcintosh/rabbitmq-zabbix 
    • или использовать облачный сервис CloudAMQP со встроенным мониторингом
  • Как настроить высокую доступность и отказоустойчивость RabbitMQ ?
    • используйте https://github.com/silverbulleters-forks/docker-rabbitmq-cluster/blob/master/docs/RU-README.md в качестве персональных экспериментов
    • попросите своих администраторов настроить контур RabbitMQ согласно штатной инструкции
    • используйте облачный сервис CloudAMQP со встроенной поддержкой отказоустойчивости и высокойдоступности
  • Как обеспечить гарантированность доставки ?
    • для сообщений, которые вы хотите доставить "обязательно" необходимо
      • устанавливать флаг persistence равным истина в методе BasicPublish
      • а очередь, которую вы определяете для храненя сообщений вы указываете как "durable" = истина в методе DeclareQueue
      • таким образом очередь будет гарантирована сохранена на диск "в случае аварии" и сообщения которые в ней хранятся будет сохранены в базе RabbitMQ (Mnesia)
    • в подсистеме 1С - по умолчанию все сообщения и очереди создаются как гарантированные к доставке
    • в облачном сервис CloudAMQP дополнительно настроена политика "высокой доступности" - когда очереди и сообщения сохраняются между нодами кластера и гарантированно будут доставлены даже если обрушилось "железо"
    • полезно изучить следующий материал https://www.rabbitmq.com/ha.html
  • Что такое событие ?
    • документ проведен, это конечно событие, но лучше всего использовать конкретные бизнес-события "в заказе покупателя добавлена новая строка".
  • Я интегрируюсь через COM соединение, SOAP,  HTTP и почему через вашу компоненту лучше ?
    • без комментариев ;-)

"Часто задаваемые вопросы покупателя"

  • Как защищен код 1С ?
    • код 1С открыт, но находится на поддержке в режиме поставки
  • Как защищена компонента ?
    • исходный код С++ закрыт
    • компонента и подсистема поставляется в режиме персональной сборки с включением идентификации по клиенту
    • обновления поставляются только легальным пользователям и не включенным в черный список
    • в черный список попадают пользователи чья подсистема и компонента обнаружена в не принадлежащий ему конфигурациях 1С или опубликованной публично
    • черный список публичен
    • такой порядок сделан для того, чтобы не добавлять проблем с ключами защиты на продуктивных серверах 1С
  • Можно ли купить подсистему без консультационной поддержки ?
    • Да конечно, методы компоненты и подсистемы описаны достаточно понятно и в целом позволяют их использовать без консалтинга.
  • Что такое полугодовая подписка на обновление ?
    • Мы активно развиваем подсистему и компоненту, вместе с этим, часть заработанных средств мы прередаем на развитие сообщества oscript.io и на его поддержку. Поэтому, чтобы иметь актуальную версию всегда и одновременно поддержать сообщество oscript.io, подписаться на обновление всё же стоит. С другом стороны, подсистема используется в продуктивных контурах уже более года, поэтому подписаться на обновление можно в любой момент, а не сразу при покупке.
  • Как передается дистрибути и обновление покупателю ?
    • Автоматизировано с помощью сервера сборок.
  • Куда задавать вопросы ?
    • В техническую поддержку Инфостарт.ру
  • Почему запрещены комментарии к данной публикации ?
    • Чтобы не было архитектурных священных войн, что интеграция через ПланыОбмена это "наше всё"
  • Сколько длится бесплатная техническая поддержка ?
    • первые полгода (6 месяцев)
    • в дальнейшем техническая поддержка предоставляется при покупке подписки на обновление.
  • Каков порядок покупки ?
    • Вы делаете заказ
    • Мы связываемся с Вами и согласуем параметры персональной сборки
    • Вы оплачиваете заказ
    • Мы отгружаем Вам дистрибутив

Сравнение версий

Текущая версия

  • 1.2.0.1

План релизов

  • 1.2.1.1 - окончание пилотиования поддержки Linux 
  • 1.2.2.1 - бета поддержка мобильной платформы 1С
  • 1.2.3.1 - подсистема-обертка над событиями устройств интернета вещей

Гарантия возврата денег

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом течение 14-ти дней со дня поступления денег на наш счет.

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

Для возврата оплаты просто свяжитесь с нами.

Скачать файлы

Наименование Файл Версия Размер
YellowRabbitMQ.pdf
.pdf 909,53Kb
18.02.17
111
.pdf 909,53Kb 111 Скачать бесплатно
Подсистема интеграции "реального времени" на базе RabbitMQ для 1С: Yellow Rabbit MQ - подсистема интеграции
28.06.2017
1.2.0.1 9600 руб.

Моментальная
доставка

Подсистема интеграции "реального времени" на базе RabbitMQ для 1С: Консультационная поддержка Yellow Rabbit MQ (1 месяц)
28.06.2017
2700 руб.
Подсистема интеграции "реального времени" на базе RabbitMQ для 1С: Подписка на обновления + техподдержка (6 месяцев)
28.06.2017
990 руб.

См. также

Автор запретил комментарии