Использование агентов для выполнения сложных операций

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

В классе-обработчике создаем функцию, которая при отсутствии будет создавать новую функцию-агента. 

$agent = \CAgent::GetList(array(), array('MODULE_ID' => 'модуль_для_агента', 'NAME' => 'Имя_функции_агента(%);'))->fetch();
if (!is_array($agent) || !isset($agent['ID'])) {
	$resId = \CAgent::AddAgent('Имя_функции_агента(0);', 'модуль_для_агента', 'Y', 43200,'','N');
	if($resId)
	{
		$this->agentId = $resId;
		$this->step = 0;
	}
			// every 15 minutes
	} else {
		preg_match('|Имя_функции_агента\((\d*)\)|si', $agent['NAME'],$matches);
		$this->step = intval($matches[1]);
		$this->agentId = (int) $agent['ID'];
	}
}

Таким образом, в параметра "step" будет шаг, на котором остановился агент. Остается лишь продумать логику, на каком шаге, какой набор операций необходимо выполнить и будет готово.

На первом шаге прописываем начало файла выгрузки. На последнем шаге прописываем завершающие теги выгрузки. На промежуточном этапе прописываем все внутренние данные для выгрузке

На каждой итерации обработки данных обновляем нашего агента:

$now = new DateTime();
$agentTime = [
	'LAST_EXEC'=>$now->format('d.m.Y H:i:s'),
	'NEXT_EXEC'=>''
];
$now->add('6 hour');
$agentTime['NEXT_EXEC'] = $now->format('d.m.Y H:i:s');

\CAgent::Update($this->agentId, [
	'NAME'=>'GoogleFeed::agent('.($this->step+1).');',
	'LAST_EXEC'=>$agentTime['LAST_EXEC'],
	'NEXT_EXEC'=>$agentTime['NEXT_EXEC']
]);

Таким образом, агент будет обновляться, в него будет помещаться следующий шаг для обработки, а также будут обновляться дата последнего запуска и следующего запуска и можно будет в списке агентов отслеживать корректность отработки агентов.

Количество показов: 175
29.04.2024

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

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

Работы по сайту

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