Межов Андрей

154
Рейтинг

mini_root
Андрей Межов



  •   Регистрация: 02.06.2009 (14 лет назад)

  •   Был(а) на сайте: 23.03.2020

Друзья
  • Василий Демидов
  • Артур Аюханов
  • Владимир Макаров
  • Дмитрий Малышев
Подписчики 9

Группы

Профессиональный разработчик

Рейтинг 154

Глобальные транзакции в сервис-ориентированной архитектуре и... 1С

Статья Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free) Архив с данными Математика и алгоритмы

В данной статье будет рассмотрен вопрос включения 1С в глобальные транзакции в рамках сервис-ориентированной архитектуры. Эта статья является продолжением статьи "Интеграция 1С с сервисной шиной OpenESB".

02.11.2009    13971    40    mini_root    19       

10

Организация B2B интеграции с использованием 1С и JMS

Статья Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free) Нет файла Внешние источники данных

В данной статье будет рассмотрен, пример организации автоматизированного взаимодействия Business2Business при помощи шины сообщений ActiveMQ (реализация Java Message Service). Основное внимание будет уделено специфичным вещам, которые требуются при интеграции разнородных систем с помощью шины сообщений: промежуточной обработке и преобразованию сообщений, маршрутизации и вопросам безопасности.

06.09.2009    14630    mini_root    13       

28

Интеграция 1С с сервисной шиной OpenESB

Статья Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free) Нет файла WEB-интеграция

В данной статье рассматривается пример интеграции 1С с шиной сервисов OpenESB, и в более широком смысле - встраивание 1С в сервис-ориентированную архитектуру.

30.07.2009    21961    mini_root    17       

36

Комментарии

DevАрхив к статье "Интеграция 1С с сервисной шиной OpenESB"#0 02.10.13 15:03
Архив к статье "Интеграция 1С с сервисной шиной OpenESB"
ОбменАрхив к статье "Организация обмена с помощью шины сообщений MSMQ"#0 03.09.13 10:25
Архив к статье "Организация обмена с помощью шины сообщений MSMQ"
ПубликацииОрганизация B2B интеграции с использованием 1С и JMS#10 26.04.13 14:15
Эти статьи писались по наработкам, которые были сделаны перед написанием одной распределенной системы для сети магазинов: как один из вариантов рассматривался свежий на тот момент 8.2 (само собой, с извращениями и не "по Радченко"), но в конечном счете здравый смысл победил и решили писать на банальной жабке (абсолютно правильно решили, кстати, скорость написания не сильно меньше, а технологичность и предсказуемость гораздо выше). Ну а наработки пошли в статьи....

Коллега, с которым мы это начинали делать, через один коммент выше, кстати (8).
ПубликацииИнтеграция 1С с сервисной шиной OpenESB#14 10.07.12 10:44
Нет, такого примера у меня сейчас нет. Надо смотреть, что за WSDL генерит JBoss и избавляться от любых наворотов в нем, вроде включенного WS-Security, надо смотреть как в этом WSDL'е описаны сложные типы (они могут и в отдельном XSD быть) и пр.

Да и вообще, я бы на движок веб-сервисов 1С'а не сильно полагался - там даже относительно "взрослые" движки, вроде WCF/Metrо/Axis2/CXF между собой далеко не всегда дружат - попытки заставить работать CXF и WCF между собой с шифрованием и подписью закончились пару лет назад безрезультатно (у меня), хотя вроде и стандарт, и xml'ники правильные формируются, и шифруется/подписывается, и каждый из движков лично самого себя прекрасно понимает и расшифровывает...
AdminОрганизация обмена с помощью шины сообщений MSMQ#55 29.11.11 10:43
В качестве иллюстрации того, что при желании схему можно закрутить как угодно: при некоторой степени извращенности можно собрать кластер для бедных, в виде фоновой службы запущенной на офисных компах, которая через специальные очереди (или еще как) выгребает код скрипта или готовую библиотеку с точкой входа, а потом обрабатывает сообщения-запросы в соответствии с загруженной логикой, потихоньку отъедая избыточную вычислительную мощность у секретарши Маши и кадровички Любы.
Пнул новый скрипт/библиотеку - изменил логику обработки. Маша выключила компьютер? Не страшно, ведь осталась Люба! Правда остается еще вопрос с источником данных, в него тоже можно упереться (производительность/блокировки).
AdminОрганизация обмена с помощью шины сообщений MSMQ#54 28.11.11 21:37
Все хорошо в меру и шина сообщений имеет целый ряд ограничений и специфических приемов при построении той или иной схемы. По большей части они происходят из асинхронной природы очередей: отсутствует блокировка для ожидания ответа. Тут есть как плюсы, так и минусы: главный плюс - возможность отложенной асинхронной и параллельной обработки, минус - сложность получения привычного "синхронного поведения".
Например, вот так реализуется схема запрос-ответ (на примере JMS, оно мне роднее): http://eaipatterns.com/RequestReplyJmsExample.html. Там же вроде есть и полный список паттернов интеграции: http://eaipatterns.com/toc.html.
Надо сказать что далеко не всегда требуется передавать данные учетных систем, которые должны следовать строго непрерывно и в полном объеме, данные вполне могут иметь "срок годности" (http://docs.oracle.com/cd/E17802_01/products/products/jms/javadoc-102a/javax/jms/MessageProducer.html - методы xxxTimeToLive).

Конкретно в вашем случае:
1. Если просто распихивать сообщения push'ем по очередям, без учета режима активности клиентов, то да - это приведет к затариванию очереди.
2. Если же усложнить схему:
- клиент отправляет сообщение с запросом в одну из очередей, указав кто он, что ему нужно и куда отвечать (replyTo в JMS).
- на другой стороне обработчик не спеша по этому запросу собирает ответный пакет, при этом транзакция на чтение из очереди запросов = транзакции на работу с БД с данными = транзакции на отправку ответного пакета (конструкция либо дорабатывает до конца, либо откатывается назад к состоянию, когда сообщение с запросом все еще стоит в очереди), после чего ответный пакет готов к забору со стороны клиента.
- клиент в одной транзакции получает пакет из шины и приземляет его к себе.
- при возникновении ошибки клиенту отправляется сообщение с ошибкой, которое он должен обработать тем или иным способом.

И вот во втором варианте, как мне кажется, вполне можно использовать timeToLive, причем и на запрос и на ответ. Клиенту будет достаточно сохранить id исходного сообщения (или другой уникальный признак), а серверу - возвращать ответные пакеты с указанием этого исходного id (то, что в JMS называется correlationId). Таким образом, всегда будет возможность узнать в ответ на какой запрос пришел этот ответный пакет, а зная порядок id запросов всегда можно восстановить соответствие, просто используя фильтр для выборки сообщения с тем или иным значением поля:

QueueReceiver receiver = session.createReceiver(myQueue, "JMSCorrelationID='id'")

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

Если же клиент по каким-то причинам не заберет сообщения из очереди, они удалятся по таймауту, начиная с самого старого. В этом случае необходимо опять сделать запрос на получение данных. В итоге получится что-то типа:

клиент -> [очередь запроса] -> обработчик(и) запросов <-> БД (или другой источник данных)
клиент <- [очередь ответа/ошибки] <------------------

Из push'а схема превращается в асинхронный poll с самообслуживанием со стороны клиента (он сам изъявляет желание получить данные).

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

Навскидку как-то так...
UtilsКонсоль выполнения произвольных текстов модуля#63 14.02.10 21:23
(57) Не, я щас кроме основной работы занимаюсь время от времени только этим

http://code.google.com/p/one-c-connectors/
ПубликацииИнтеграция 1С с сервисной шиной OpenESB#12 12.01.10 9:22
(11) Ну для меня это не вариант, потому что хочется чего-то большего да и с SOAP'ом проблем особых не возникало. Однако в твоем примере прежде всего заинтересовало то что он для 77, из описания не совсем понятно возможна ли передача произвольных аргументов, и, что самое интересное, возвращение произвольных значений. Халявной сериализации-то в 77 нету...

Свою идею планирую развивать:
http://infostart.ru/forum/forum19/topic30245/
УчетОбщие вопросы лицензирования#64 30.12.09 11:07
(63) Я бы еще понял, если бы они привязали это дело к количество поднятых контекстов (и это было бы логичным), но мультиплексирование и "в действительности одновременно работающих с системой" - это уже перебор, хотя бы потому, что с именно "системой" они могут и не работать.

УчетОбщие вопросы лицензирования#63 30.12.09 10:49
А мне, например, вот эта конструкция кажется абсолютно безумной:

>В соответствии с действующим Лицензионным соглашением, использование программных или аппаратных средств, уменьшающих количество пользователей, которые имеют непосредственный доступ к "1С:Предприятию 8", не уменьшает количества требуемых лицензий. Организация должна приобрести Клиентские лицензии по количеству пользователей, в действительности одновременно работающих с системой "1С:Предприятие 8".


>уменьшающих количество пользователей, которые имеют непосредственный доступ к "1С:Предприятию 8

но

>в действительности одновременно работающих с системой "1С:Предприятие 8"


под последнюю формулировку можно подогнать что угодно - это как если бы MS брала деньги не за клиентское подключение, а за всех, кто посмотрит потом отчет, выгруженный из базы через это подключение

хм... а если выгрузить в xls отчет из 1С и раздать его сотне человек - сколько потребуется лицензий? а если я напишу затычку, которая будет через одно COM-соединение вытаскивать данные и класть их в ОТДЕЛЬНУЮ БД (не 1C), к которой потом будет обращаться сайт со 100 пользователями в секунду? а в чем разница с отчетом? а является ли такая система средством уменьшающим количество пользователей? а если сделать асинхронную развязку (это к "в действительности одновременно"), когда часть которая общается с 1С, обрабатывает очередь запросов и приземляет их на 1С через ОДНО соединения? а если в эту очередь могут помещать данные разные удаленные системы? а если... о ужас - 1С по регламентному заданию будет класть в очередь сообщений данные, которые потом будут получать сразу 1000 подписчиков?


Я грешным делом думал, что непосредственно работают с системой = действительно работают с системой

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