Поддержка параллельной выгрузки каталога из 1С на сайт

Рейтинг: 13.5608  
Новая
Предложил Пользователь 3089 27.06.2019 04:57:13

Поддержка параллельной выгрузки каталога из 1С на сайт

В силу специфики настройки расписания рано или поздно возникает ситуация, когда одновременно работает два обмена. Это приводит к потере таблицы b_xml_tree и обрушению обмена.

Чтобы выгрузка каталога могла работать в нескольких сеансах обмена одновременно (напомню, профиль обмена можно настроить так, что выгружаться будут только остатки, цены ... и с разным графиком) нужно обеспечить изоляцию сеансов на двух уровнях - файлы и БД (пресловутая таблица b_xml_tree).

Изоляция по файлам возможна, если воспользоваться параметром USE_TEMP_DIR компоненты bitrix:catalog.import.1c.

С изоляцией по БД ситуация запутана. С одной стороны есть API:
  • \CIBlockXMLFile::StartSession
  • \CIBlockXMLFile::EndSession
  • \CIBlockXMLFile::GetSessionRoot

С другой стороны, в компоненте обмена оно не используется!!! Кстати, сходу и не найдешь где оно вообще используется.

В поддержке (обращение 2380113 "Поддержка паралелльных выгрузок каталога на сайт") мне сообщили:
В настоящий момент логика обмена такова, что изменить ее под несколько параллельных потоков выгрузки нельзя.

Предлагаю переработать логику так, чтобы это было возможно. Предложение касается классического XML обмена. Но может затронуть (надеюсь, что нет) и REST обмен.

Рейтинг: 0  
Пользователь 420455 02.07.2019 15:26:48
Судя по вопросу, видно, что не первый день работаете с битриксом, и должны уже понимать, все, что выходит за рамки шаблонного интернет магазина, с самой простой выгрузкой каталога, то лучше писать с нуля, не пытаться понять и кастомизировать уже написанное битриксом.

Если штатный обмен устраивает,
то можно написать свою простенькую систему очередей. Таблица в БД с сообщениями.
Из 1С приходят запросы на импорт - добавляете в таблицу соответствующую запись.
На сайте уже кроном читаете, или другим способом читаете очередь и импортируете.

Либо можно воспользоваться другими готовыми системами очередей, на базе redis, rabbitmq, tarantool
Рейтинг: 0  
Пользователь 3089 02.07.2019 16:57:29
Судя по вопросу, видно, что не первый день работаете с битриксом, и должны уже понимать, все, что выходит за рамки шаблонного интернет магазина, с самой простой выгрузкой каталога, то лучше писать с нуля, не пытаться понять и кастомизировать уже написанное битриксом.
Арсен, я пока пребываю в юношеской наивности. Она заключается в уверенности, что если что-то очень хорошо захотеть, то сбудется. Тем более Битрикс завел для этого штатный инструмент - сайт идей.

Если штатный обмен устраивает,
то можно написать свою простенькую систему очередей. Таблица в БД с сообщениями.
Из 1С приходят запросы на импорт - добавляете в таблицу соответствующую запись.
На сайте уже кроном читаете, или другим способом читаете очередь и импортируете.
Очень не устраивает. И наелся я таких решений.

Либо можно воспользоваться другими готовыми системами очередей, на базе redis, rabbitmq, tarantool
И свои очереди, и эти, лучше подходят к заказам. Хотя, программист 1С будоражит общественность онлайн-обменом остатков, цен. Это значит реакцию на событие в 1С. Да, очереди могут быть полезны и для заказов.

Но, все-таки, такие вещи должны быть в штатной комплектации. Что каждый во что горазд можно даже и не писать. Это ясно. Если бизнес заставит, сделаешь и не такое. И ждать не будет ни CommerceML, ни REST.
Рейтинг: 0  
Пользователь 25773 18.08.2020 10:41:06
Мы написали подобную идею несколько лет назад https://idea.1c-bitrix.ru/events-for-parallel-unloading-of-goods/

Но потом написали свой модуль Параллельный и ускоренный обмен с 1С
https://marketplace.1c-bitrix.ru/solutions/askaron.parallel1c/

Как выяснилось, что кроме нескольких баз нужно еще что-то делать с деактивацией. Параллельно деактивации не работают как надо. Для случая, когда параллельно выгружаются товары в один инфоблок тоже надо что-то придумывать.
Рейтинг: 0  
Пользователь 3089 19.08.2020 09:05:45
Я уже сделал сам на основе найденного мной API.
Да, меня тоже смущают деактивации. Также беспокоят обновления метаданных инфоблоков.

Не использовал Ваш модуль не только из-за цены (хотя, вопросы мне бы задавали). Цена на такой сложной разработке отобьется. Но только если делать обмен с нуля, на новом проекте. У меня уже было много наработок. Внедрять стороннее решение на этом фоне проблематично. Пришлось развивать свое. Отчуждаемым это решение я не делал. Скрипт обмена там один. Никаких настроек параллелизма со стороны сайта не требуется.