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

Рейтинг: 5.8902  
Новая
Предложил Кирсанов Анатолий 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  
Арсен 02.07.2019 15:26:48
Судя по вопросу, видно, что не первый день работаете с битриксом, и должны уже понимать, все, что выходит за рамки шаблонного интернет магазина, с самой простой выгрузкой каталога, то лучше писать с нуля, не пытаться понять и кастомизировать уже написанное битриксом.

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

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

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

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

Но, все-таки, такие вещи должны быть в штатной комплектации. Что каждый во что горазд можно даже и не писать. Это ясно. Если бизнес заставит, сделаешь и не такое. И ждать не будет ни CommerceML, ни REST.