0. pbazeliuk 1700 18.03.16 02:45 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
91. pbazeliuk 1700 02.08.16 14:11 Сейчас в теме
(90) Mambetin, если с метаданными умеешь работать, можно даже сделать документацию API на выходе. Можно сделать форму, какие поля будут выгружаться/загружаться и от накликаного автоматически будет формироваться все остальное (Документация + API).
120. user1048547 10.10.18 12:37 Сейчас в теме
(89)Извините а есть пример реализации с RabbitMQ при помощи HTTP запросов?
121. Evil Beaver 6291 10.10.18 20:38 Сейчас в теме
(120) родного RMQ адаптера под HTTP нет, насколько я знаю. Можно закостылить сервер-обертку на каком-то другом языке. Но скорость будет так себе, по сравнению с честным двоичным протоколом AMQP
122. pbazeliuk 1700 11.10.18 11:57 Сейчас в теме
(120) можете воспользоваться этим сервисом (лицензия MIT) https://github.com/FoxyLinkIO/FoxyLink.RabbitMQ
97. Serginio 797 12.09.16 22:25 Сейчас в теме
Да кстати COM немного быстрее Native API
101. b00t 63 14.09.16 18:41 Сейчас в теме
(97) Serginio, COM просто не может быть быстрее NativeApi. COM -- тот ещё известный "тормоз". NativeApi по сути просто вызов кода из динамической библиотеки, с дополнительной трансляцией типов, и то не всегда. COM -- это ровно всё тоже самое, но только предваренное кучей сервисных вызовов, оборачивания объектов в диспетчеры и т.д. Т.е. если в каком-то тестировании оказалось что COM быстрее -- это очень плохое тестирование, я себе плохо представляю что там внутри набыдлокодили, чтобы так вышло.
102. Serginio 797 14.09.16 20:18 Сейчас в теме
Угу у IDispatch 2 вызова
GetIDsOfNames
Invoke

AddRef и Release вызываются при присвоении или выходу видимости
В Native API 4 вызова
FindMethod
GetNParams
HasRetVal
CallAsFunc

Да еще GetParamDefValue если количество параметров не соответствует указанному (перегрузка методов, дефолтные параметры, параметры массивы)

Для .Net так и так будут прокси. А для натива это вызов виртуальной функции. Но

Сейчас скорость вызова метода ВК почти в 15 раз медленнее вызова из С++ только
public static bool CallAsFunc(int Target, IntPtr ИмяМетодаPtr, IntPtr ReturnValue, IntPtr МассивПараметров, int РазмерМассива)

И медленнее в 5 раз аналогичного метода 1С. При этом вместо одного метода вызывается FindMethod, GetNParams, CallAsFunc. А если вызывать напрямую без ВК то и скорость будет аналогичной с использованием внутренних методов.
103. b00t 63 14.09.16 21:07 Сейчас в теме
(102) Serginio, ну значит, это адов косяк платформы, если всё так, как вы описали. Собственно это не удивительно, я недавно разбирался с одним "глюком", в процессе разборок выяснились подробности, очень "необычного" способа, если не сказать грубее, платформы на Linux искать библиотеки и определять их версии -- парсить консольный вывод ldconf -p
Да, простите, отвечая вам о скорости COM, я не учёл, что работа NativeApi может содержать "интересные" особенности. И если COM платформой используется через MFC/ATL скорее всего, то как там внутри "нагородили" NativeApi, остается только догадываться.
104. Serginio 797 14.09.16 21:15 Сейчас в теме
(103) Я написал в конце статьи http://infostart.ru/public/548701/ свои соображения. Но 1С это не особо волнует. Хотя можно и скорость увеличить и сделать кроссплатформенную замену COM
105. Serginio 797 15.09.16 16:28 Сейчас в теме
Кстати хочу статью написать по использованию в .Net Core WCF,ODATA могу и кролика вашего с событиями. Только мне какой нибудь тестовый сервис.

Есть RabbitMQ.Client под NetStandart 1.5
106. pbazeliuk 1700 15.09.16 17:09 Сейчас в теме
(105) Serginio, как-то преимуществ не вижу RabbitMQ + .Net WCF и .Net OData.
Все что может WCF можно реализовать на стороне 1С HTTP-Сервисом.
OData какой-то изврат получается.

P. S. Нужен адекватный пример\паттерн использования и обоснование почему стоит технологии использовать вместе.
107. Serginio 797 15.09.16 17:30 Сейчас в теме
(106) Нет поддержки WS протоколов, Header и прочих например
http://1c.mista.ru/topic.php?id=775298&page=1

ODATA там поддержка моделей Linq и тд. Можно динамическую компиляцию и спользовать либо сборки. Не нужно писать вручную HTTP запрос Linq to ODATA
В том числе поддержка протокола V4.


Ну а RabbitMQ HTTP клиентом то как?
108. Serginio 797 15.09.16 17:32 Сейчас в теме
Это я еще и для .Net Core пишу. Многое совсем недавно появилось. Там все меняется очень быстро.

По WS протоколам https://msdn.microsoft.com/ru-ru/library/ms752261(v=vs.110).aspx
112. vigo2 05.07.17 11:52 Сейчас в теме
"Ошибка вызова метода внешней компоненты" на строке:
Результат = Компонента.SengMessage(Message);
113. pbazeliuk 1700 05.07.17 13:52 Сейчас в теме
(112) Вы, наверное, первый кто попытался собрать все по статье. Все что здесь описано, к сожалению, уже устарело и в целом подход очень изменился и улучшился. Больше всего у вас ошибка где-то при сборке внешней компоненты (.NETLoader или _1CV8Publisher, так же может ошиблись с namespace)

P. S. Возможно, я напишу новую статью и размещу проект на github.com. Но больше помочь ничем не могу, увы.
114. vigo2 05.07.17 13:59 Сейчас в теме
(113) Есть подозрение, что дело в том, что Win7_64, а клиент 1С_32.
namespace взял из Вашего исходника: _1CV8Publisher.V8Publisher
P.S. класс в 1С видется, т.к. попробывал сгенерить ошибку:
Компонента.Test = "Нет этого property в классе";
и эта строка не отработала, т.к. нет такого свойства в Вашем классе
115. pbazeliuk 1700 05.07.17 14:10 Сейчас в теме
(114) https://github.com/pbazeliuk/RmqClient можете себе собрать .NETLoader x32 и х64, ну и так же компоненту.
116. pbazeliuk 1700 05.07.17 14:14 Сейчас в теме
(114)Тогда возможно ошибка в параметрах доступа к кластеру RabbitMQ
117. vigo2 05.07.17 14:35 Сейчас в теме
(116) Благодарю за оперативные ответы.
С JS к rabbitMQ без проблем подключается через библиотеку amqp. HostName = "amqp://somehost.org";
В 1С пробовал Компонента.HostName = "http://somehost.org:5672";
и без порта: Компонента.HostName = "http://somehost.org";
Через браузер заходит с данной комбинацией логин/пароль
118. pbazeliuk 1700 05.07.17 15:39 Сейчас в теме
(117) Подключение, что описано в примере подразумевает обычное не шифрованное TCP-подключение, попробуйте поднять локальный кластер или переписать подключение с использованием AMQP URL (тогда будет использован SSL). Это частично описано в документации.
119. yaxinr 49 26.02.18 09:05 Сейчас в теме
способ отправки JSONAPI в RabbitMQ через http
https://infostart.ru/public/790597/
PavelKolobkov; +1 Ответить
123. pbazeliuk 1700 11.10.18 12:03 Сейчас в теме
(119) HTTP-протокол, как плагин RabbitMQ, не гарантирует доставку, даже если был возвращен статус: 200 OK
Evil Beaver; +1 Ответить
124. seregasame 26.02.19 11:22 Сейчас в теме
В чем может быть проблема?
Could not load file or assembly '1CV8Publisher' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
125. seregasame 26.02.19 11:55 Сейчас в теме
Разобрался, криво создал проект
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата от 130 000 руб. до 200 000 руб.
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Консультант-методолог 1С
Краснодар
зарплата от 110 000 руб.
Полный день