From 54d44ab21b6b7a9bc3814a4815fef879d3340d07 Mon Sep 17 00:00:00 2001 From: Nik Samokhvalov Date: Thu, 5 Jan 2017 21:16:45 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=BE=20=D0=B0=D0=B3=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ru/agent.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/ru/agent.md b/docs/ru/agent.md index e69de29..99daf6a 100644 --- a/docs/ru/agent.md +++ b/docs/ru/agent.md @@ -0,0 +1,8 @@ +# Агенты + +Тяжеловесные или отложенные операции на сайте удобно выполнять в фоновом режиме, иногда с определённой периодичностью, +иногда практически моментально. Помочь в этом может [система очередей](http://ruhighload.com/index.php/2009/05/15/%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9-%D1%87%D1%82%D0%BE-%D1%8D%D1%82%D0%BE-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC/). +Но в некоторых случаях, когда не требуется шардирование и отказоустойчивость подсистемы выполнения отложенных операций, +можно воспользловаться штатной технологией «Битрикса» — [агентами](http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3436). +К сожалению, эта технология имеет сырое API, но Console Jedi предоставляет свой API, покрывающий весь цикл работы с агентами. + From a1368594b672f6af6be8d02032eee82664285cba Mon Sep 17 00:00:00 2001 From: Nik Samokhvalov Date: Fri, 15 Dec 2017 18:22:28 +0300 Subject: [PATCH 2/3] Manual about agents --- docs/ru/agent.md | 81 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/docs/ru/agent.md b/docs/ru/agent.md index 99daf6a..1e9aadf 100644 --- a/docs/ru/agent.md +++ b/docs/ru/agent.md @@ -1,8 +1,73 @@ -# Агенты - -Тяжеловесные или отложенные операции на сайте удобно выполнять в фоновом режиме, иногда с определённой периодичностью, -иногда практически моментально. Помочь в этом может [система очередей](http://ruhighload.com/index.php/2009/05/15/%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9-%D1%87%D1%82%D0%BE-%D1%8D%D1%82%D0%BE-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC/). -Но в некоторых случаях, когда не требуется шардирование и отказоустойчивость подсистемы выполнения отложенных операций, -можно воспользловаться штатной технологией «Битрикса» — [агентами](http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3436). -К сожалению, эта технология имеет сырое API, но Console Jedi предоставляет свой API, покрывающий весь цикл работы с агентами. - +# Агенты + +Тяжеловесные или отложенные операции на сайте удобно выполнять в фоновом режиме, иногда с определённой периодичностью, +иногда практически моментально. Помочь в этом может [система очередей](http://ruhighload.com/index.php/2009/05/15/%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9-%D1%87%D1%82%D0%BE-%D1%8D%D1%82%D0%BE-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC/). +Но в некоторых случаях, когда не требуется шардирование и отказоустойчивость подсистемы выполнения отложенных операций, +можно воспользоваться штатной технологией «Битрикса» — [агентами](http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3436). +К сожалению, эта технология имеет сырое API, но Console Jedi предоставляет свой API, покрывающий весь цикл работы с агентами. + +## Жизненный цикл + +### Настройка + +Переведите [выполнение агентов на cron](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2943&LESSON_PATH=3913.4776.4620.4978.2943), +если ещё не сделали этого. В Console Jedi этот процесс автоматизирован, поэтому, в отличии от официального руководства, +достаточно выполнить команду: + +```bash +vendor/bin/jedi agent:on-cron +``` + +### Создание + +PHP-класс агента либо должен наследовать класс `\Notamedia\ConsoleJedi\Agent\Agent`, либо подключать трейт +`\Notamedia\ConsoleJedi\Agent\AgentTrait`, позволяющие объекту класса работать в режиме агента. + +Вот и всё, больше не требуется никаких операций. И самое главное — не нужно создавать в классе статичные методы, как это +рекомендует официальная документация «Битрикса», — Console Jedi умеет превращать объекты (с конструктором и публичными +нестатичными методами) в формат, ожидаемый «Битриксом». + +### Регистрация + +В момент, когда потребуется зарегистрировать в «Битриксе» новый агент, воспользуйтесь специальным строителем +`\Notamedia\ConsoleJedi\Agent\AgentTask`, например: + +```php +use Notamedia\ConsoleJedi\Agent\AgentTask; +use Vendor\Module\TestAgent; + +AgentTask::builder() + ->setClass(TestAgent::class) + ->setConstructorArgs(['arg1', true]) + ->setCallChain([ + ['execute' => [100500]] + ]), + ->setModule('vendor.module') + ->create(); +``` + +> За подробным описанием методов строителя агентов обратитесь к PHPDoc-комментариям в классе `AgentTask`. + +### Выполнение + +Добавьте в crontab вызов команды, выполняющий готовые к работе агенты: + +```bash +vendor/bin/jedi agent:execute +``` + +## Продление жизни агента + +Если время выполнения агента превышает 10 минут, необходимо периодически в процессе его работы выполнять пинг, чтобы +«Битрикс» не считал его зависшим. Например: + +```php +public function executeAgent($param1, $param2) +{ + // start a heavy (big) cycle + + $this->pingAgent(20, ['executeAgent => [$param1, $param2]]); + + // end of cycle +} +``` \ No newline at end of file From bc8c85dc6055975465eb1d716aa68c2a948d2f78 Mon Sep 17 00:00:00 2001 From: Nik Samokhvalov Date: Fri, 15 Dec 2017 18:33:31 +0300 Subject: [PATCH 3/3] Fix types errors --- docs/ru/agent.md | 19 +++++++++++-------- src/Agent/AgentTrait.php | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/ru/agent.md b/docs/ru/agent.md index 1e9aadf..ae36ee5 100644 --- a/docs/ru/agent.md +++ b/docs/ru/agent.md @@ -30,19 +30,22 @@ PHP-класс агента либо должен наследовать кла ### Регистрация В момент, когда потребуется зарегистрировать в «Битриксе» новый агент, воспользуйтесь специальным строителем -`\Notamedia\ConsoleJedi\Agent\AgentTask`, например: +`\Notamedia\ConsoleJedi\Agent\AgentTask`. + +Давайте зарегистрируем агент модуля `vasya.tester`, при выполнении которого будет создаваться объект `TestAgent` с аргументами `arg1` +(строка) и `true` (булевый тип) и вызываться метод объекта `execute` с аргументом `100500` (строка): ```php use Notamedia\ConsoleJedi\Agent\AgentTask; use Vendor\Module\TestAgent; - + AgentTask::builder() ->setClass(TestAgent::class) ->setConstructorArgs(['arg1', true]) ->setCallChain([ ['execute' => [100500]] ]), - ->setModule('vendor.module') + ->setModule('vasya.tester') ->create(); ``` @@ -50,7 +53,7 @@ AgentTask::builder() ### Выполнение -Добавьте в crontab вызов команды, выполняющий готовые к работе агенты: +Добавьте в `crontab` вызов команды, которая производит выполнение готовых к работе агентов: ```bash vendor/bin/jedi agent:execute @@ -62,12 +65,12 @@ vendor/bin/jedi agent:execute «Битрикс» не считал его зависшим. Например: ```php -public function executeAgent($param1, $param2) +public function execute($param1) { - // start a heavy (big) cycle + // Начало выполнения тяжёлых операций - $this->pingAgent(20, ['executeAgent => [$param1, $param2]]); + $this->pingAgent(20, ['execute' => [$param1]]); - // end of cycle + // Завершение выполнения } ``` \ No newline at end of file diff --git a/src/Agent/AgentTrait.php b/src/Agent/AgentTrait.php index 2a266b6..b046895 100644 --- a/src/Agent/AgentTrait.php +++ b/src/Agent/AgentTrait.php @@ -77,7 +77,7 @@ public static function agent() * { * // start a heavy (big) cycle * - * $this->pingAgent(20, ['executeAgent => [$param1, $param2]]); + * $this->pingAgent(20, ['executeAgent' => [$param1, $param2]]); * * // end of cycle * } @@ -119,7 +119,7 @@ protected function pingAgent($interval, array $callChain) * { * // main logic * - * return $this->getAgentName(['executeAgent => [$param1, $param2]]); + * return $this->getAgentName(['executeAgent' => [$param1, $param2]]); * } * ``` *