Обеспечивает интеграцию Битрикс с брокером сообщений RabbitMQ (AMQP) либо, при его отсутствии, реализует менеджер на базе используемой продуктом СуБД.
Разработан на основе пакета yii3 queue
Модуль предназначен для разработчиков, никаких компонентов/шаблонов для публичной части не предполагается.
Детали использования см. на вкладке "Установка"
Приобретенные программные продукты поставляются в виде цифро-буквенного кода. Используя код, вы сможете установить продукт на хостинг. Код приходит на указанный в заказе адрес электронной почты.
Время от момента получения оплаты до момента отправки кода составляет несколько часов. В течение этого периода выполняет оформление приобретенной продукции.
Обращаем ваше внимание, что дополнительная задержка может быть вызвана некорректно указанным адресом почты. Просим вас внимательно проверять ваши персональные данные при оформлении заказа. Мы гарантируем, что конфиденциальность ваших данных будет соблюдена.
Что требуется для установки:
- CSM «1С-Битрикс».
- Домен.
- Хостинг.
Мы предлагаем приобрести все необходимое в готовом наборе на нашем сайте. Это позволит ускорить дальнейшую установку.
Бонус: бесплатная базовая установка!
Чтобы получить подробную информацию о сервисе, вы можете ознакомиться с официальными реестрами Visa International и MasterCard Worldwide. Заполнив и подтвердив заказ, вы будете переадресованы на сайт сервиса Яндекс.Деньги. Там вы сможете оплатить заказ, воспользовавшись картой Visa, Mastercard или Maestro или кошельком Яндекс.Деньги.
Подробнее
Решение устанавливается на любые редакции БУС:
- Установите модуль штатным образом. Запись сообщений
- По умолчанию очередь обслуживается используемой продуктом СуБД (в процессе установки модуль создает таблицу в базе данных, в которую пишутся сообщения и обрабатываются в дальнейшем)
Для использования на базе брокера сообщений RabbitMQ необходимо внести изменение в конфигурацию приложения (файл .settings.php), добавив новое соединение в секцию `connections`.'rabbitmq' => [ 'className' => '\\InterMotion\\Queue\\Expansion\\Bitrix\\Main\\Data\\RabbitMQConnection', 'host' => "{rabbitmq_host}", 'port' => {rabbitmq_port}, 'username' => "{rabbitmq_username}", 'password' => "{rabbitmq_password}", ], - Обработка сообщений
Предпочтительным является обработка сообщений, используя процесс-менеджер `supervisor`, альтернативным вариантом является использование менеджера фоновых задач - `crontab`.
$ sudo apt update && sudo apt install supervisor -y $ sudo systemctl enable --now supervisor $ sudo nano /etc/supervisor/conf.d/bitrix-worker.conf |
[program:bitrix-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/site.tld/bitrix/modules/intermotion.queue/tools/console.php queue:listen autostart=true autorestart=true stopasgroup=true killasgroup=true numprocs=5 redirect_stderr=true stdout_logfile=/var/log/bitrix-worker.log |
Параметр `numproc` отвечает за количество активных единомоментно процессов (воркеров) параллельно обрабатывающих очередь.
применяем конфигурацию:$ sudo supervisorctl reread $ sudo supervisorctl update # запускаем воркер $ sudo supervisorctl start bitrix-worker |
$ sudo supervisorctl status |
* * * * * /usr/bin/flock -w 1 php /var/www/site.tld/bitrix/modules/intermotion.queue/tools/console.php queue:run |
Использование штатных событий
Модуль реализует отложенное выполнения ряда штатных событий для элементов, разделов инфоблоков, товаров, их остатков и цен.
use Bitrix\Main;
// элементы инфоблоков
iblock:OnAfterIBlockElement<Add,Update,Delete>(array $fields)
-> intermotion.queue:onAfterIblockElement<Add,Update,Delete>(new Main\Event $e {
parameters: [elementId: {id}, iblockId: {iblockId}]
})
-> intermotion.queue:onAfterIblockElementAction(Main\Event $e {
parameters: [elementId: {id}, iblockId: {iblockId}, action: {add,update,delete}]
})
// разделы инфоблоков
iblock:OnAfterIBlockSection<Add,Update,Delete>(array $fields)
-> intermotion.queue:onAfterIblockSection<Add,Update,Delete>(Main\Event $e {
parameters: [elementId: {id}, iblockId: {iblockId}]
})
-> intermotion.queue:onAfterIblockSectionAction(new Main\Event $e {
parameters: [elementId: {id}, iblockId: {iblockId}, action: {add,update,delete}]
})
// товары
catalog:Bitrix\Catalog\Model\Product::OnAfter<Add,Update,Delete>(Main\Event $e)
-> intermotion.queue:onAfterCatalogProduct<Add,Update,Delete>(Main\Event $e {
parameters: [productId: {id}]
})
-> intermotion.queue:onAfterCatalogProductAction(new Main\Event $e {
parameters: [productId: {id}, action: {add,update,delete}]
})
// цены
catalog:Bitrix\Catalog\Model\Price::OnAfter<Add,Update,Delete>(Main\Event $e)
-> intermotion.queue:onAfterCatalogProductPrice<Add,Update,Delete>(Main\Event $e {
parameters: [productPriceId: {id}]
})
-> intermotion.queue:onAfterCatalogProductPriceAction(new Main\Event $e {
parameters: [productPriceId: {id}, action: {add,update,delete}]
})
// остатки
catalog:OnStoreProduct<Add,Update,Delete>(int $id)
-> intermotion.queue:onAfterCatalogStorePrice<Add,Update,Delete>(Main\Event $e {
parameters: [productStoreId: {id}]
})
-> intermotion.queue:onAfterCatalogProductStoreAction(new Main\Event $e {
parameters: [productStoreId: {id}, action: {add,update,delete}]
}) |
Например, при создании элемента инфоблока необходимо выполнить сложные, ресурсозатратные операции. Если подписываться на стандартные события модуля "информационные блоки", то время, которое необходимо на просчет этих операций, будет "затормаживать" систему администрирования и прочие api-вызовы, подразумевающие сохранение элементов.
Это идеальный случай для использования "отложенных" выполнений событий.
use Bitrix\Main;
use Bitrix\Iblock;
use InterMotion\Queue;
// вместо
Main\EventManager::getInstance()->addEventHandler(
'iblock',
'OnAfterIBlockElementAdd',
function(array $fields): void
{
try
{
if (!isset($fields['RESULT']) || !$fields['RESULT'])
{
throw new Main\NotSupportedException('Element not really saved');
}
$elementId = (int) $fields['ID'];
$iblockId = (int) $fields['IBLOCK_ID'];
// сложные вычисления.
}
catch (\Throwable $exception)
{
}
}
);
// используем
Main\EventManager::getInstance()->addEventHandler(
Queue\Config::getModuleName(),
'OnAfterIBlockElementAdd',
function(Main\Event $event): Main\EventResult
{
try
{
// обязательно необходимо проверить что элемент, соответсвующий идентификатору существует
$elementId = $event->getParameter('elementId');
$iblockId = $event->getParameter('iblockId');
// сложные вычисления.
}
catch (\Throwable $exception)
{
}
return (new Main\EventResult(Main\EventResult::SUCCESS);
}
); |
ВАЖНО: все обработчики событий имеют равный приоритет выполнения и попадают в один общий канал (`channel`). Поэтому, следует не допускать перекоса по времени выполнения обработчиков. Например, есть 10 типов обработчиков, 9 из которых выполняются по 5-10 секунд, а 10-ый требует для выполнения одну минуту. Таким образом, в перспективе, 9 обработчиков будут ждать когда выполнится 10-ый. При условии, что событий очень много, может возникнуть ситуация, когда все время выполняются только 10-ые обработчики, а до первых 9 очередь просто не дойдет.
Решить данную проблему можно либо,
- увеличением количества процессов (см `supervisor`, параметр `numprocs`;
- созданием своих собственных событий, которые будут отправлять сообщения в отдельный канал и в последующем выделять отдельные воркеры на обработку только этого канала
Если предоставляемых модулем событий недостаточно для реализации необходимого функционала, есть возможность создавать свои собственные.
Для этого необходимо:
- создать задачу (унаследоваться от абстрактного класса `InterMotion\Queue\Job\Base`)
- зарегистрировать задание на событии `registerJob`
Рабочий пример задания - `lib/job/example.php`
namespace InterMotion\Queue\Job;
use Psr;
use YiiSoft\Queue as YiiQueue;
// описание класса задания
class Example extends Base
{
/**
* @return string
*/
public function getChannel(): string
{
// в какой канал публикуем сообщение
return 'default';
}
/**
* @return string
*/
public function getJobId(): string
{
// внутренний идентификатор задания, для того, чтобы при чтении сообщений из канала можно было идентифицировать обработчик
// УНИКАЛЕН для каждого типа задания !!
return 'intermotion-queue-job-example';
}
/**
* @param YiiQueue\Message\MessageInterface $message
* @return void
* @throws \Exception
*/
public function execute(YiiQueue\Message\MessageInterface $message): void
{
$logger = $this->getLogger();
try
{
$logger->info('job started', [
'data' => $message->getData(),
'metadata' => $message->getMetadata(),
'handlerName' => $message->getHandlerName()
]);
// do nothing
// выполнение самой задачи
$logger->info('job complete');
}
catch (\Exception $exception)
{
$logger->error(
$exception->getMessage(),
[
'trace' => $exception->getTrace()
]
);
throw $exception;
}
}
}
// регистрируем задание
Main\EventManager::getInstance()->addEventHandler(
Queue\Config::getModuleName(),
'registerJob',
function(Main\Event $event): Main\EventResult {
return (new Main\EventResult(Main\EventResult::SUCCESS, [
'JOBS' => [
// класс задания, можно зарегистрировать сразу несколько
[ 'CLASS' => Queue\Job\Example::class ],
]
]));
}
); |
Решение поддерживает консольные команды `Symfony Console`:
1. Обработка всех существующих сообщений в определенных каналах. Завершается, когда заканчиваются сообщения.
Используется для разработки / отладки / запуске на менеджере запуска заданий `crontab`
php bitrix/modules/intermotion.queue/tools/console.php queue:run [channel1 [channel2 [...]]] --maximum 100 |
Аргументы и опции:
- channel - перечень каналов, сообщения из которых необходимо извлечь. По умолчанию - из всех каналов
- maximum - максимальное количество для обработки В КАЖДОМ канале. По умолчанию 0 - все сообщений
Используется для процесс-менеджера `supervisor`
php bitrix/modules/intermotion.queue/tools/console.php queue:listen [channel1 [channel2 [...]]] |
Аргументы:
- channel - перечень каналов, сообщения в которых необходимо слушать. По умолчанию - из всех каналов
По умолчанию создается лог-файл `queue.log` в корне модуля.
InterMotion
-
Запуск на хостинге
-
Индивидуальный дизайн
-
Наполнение контентом
-
Настройка
-
Адаптация под сферу деятельности
-
Поисковая оптимизация
Это заранее созданный сайт или демоверсия интернет-магазина с лид-формами и кнопками, который вы можете оплатить и использовать для своего проекта.
В будущем можно корректировать ресурс.
На стоимость влияют дизайн, используемые цветовые схемы, количество страниц, демоконтент, структура меню и т.д.
Также для разработки интернет-магазина нужны система управления контентом на платформе «Битрикс», домен и хостинг. Они тоже влияют на итоговую стоимость.
С перечнем подходящих редакций можно ознакомиться на странице любого решения. По набору функций редакции делятся на две категории:
- Редакции для создания лендинговых и корпоративных сайтов;
- Редакции для разработки интернет-магазинов.
Одностраничные сайты и корпоративные порталы разрабатывают на базе редакций «Старт» и «Стандарт». Последняя имеет модуль проактивной защиты, в который входят:
- антивирус;
- панель безопасности;
- инструмент для аудиторской проверки;
- система одноразовых паролей;
- журнал вторжений;
- защита от хакерских атак и др.
Модуль корзины в эти редакции не входит, что затрудняет создание интернет-магазина. Этот модуль включен в редакции «Малый бизнес» и «Бизнес», которые поддерживают интеграцию с 1С.
Редакция «Бизнес» понадобится, если:
- Цена на один и тот же товар различна для нескольких групп покупателей.
- Вы запускаете программы лояльности, системы бонусов и скидок.
- Вы продаете наборы товаров.
- В магазине продаются комплекты из основной позиции и необязательных аксессуаров.
- Необходимо отображать информацию о наличии товара в офлайн-магазинах или на складах.
Если вы не нуждаетесь в таких возможностях, остановитесь на «Малом бизнесе». В будущем можно перейти на редакцию «Бизнес».
Да, мы можем интегрировать сайт с «Битрикс». Мы сделаем это бесплатно для лицензий категории «Малый бизнес» и выше.
Для этого нам нужны ссылки на ваш хостинг и доступы к нему для авторизации, домен, лицензионный ключ «Битрикс», купон для установки.
- После покупки лицензионного ключа вам на почту придет код: 23 символа, которые состоят из букв латинского алфавита и цифр в формате XXX-XX-XXXXXXXXXXXXXXXX. Зарегистрируйте эти данные на платформе «Битрикс».
- Скачайте файл для установки.
- Авторизуйтесь на сайте вашего хостинг-провайдера.
- Зайдите в файловый менеджер. Здесь можно загрузить файл в папку хостинга.
- Создайте базу данных.
- Перейдите на тестовый домен формата имя-сайта/bitrixsetup.php.
- Выберите ту версию, которая соответствует вашему лицензионному ключу.
- Скопируйте 23-значный код из почты и вставьте его в поле «Лицензионный ключ», загрузите его.
- Нажмите кнопку «Далее», когда появится окно установки.
- Примите соглашение и нажмите «Далее».
- Выберите пункт ««Я хочу зарегистрировать свою версию продукта» и заполните обязательные поля. Если вы хотите создать сайт на иностранном языке, также отметьте пункт «Установить в кодировке UTF-8» и переходите далее.
- На экране предварительной проверки убедитесь, что все показатели горят зеленым. Если некоторые показатели красные, значит, они не соответствуют требованиям. Чтобы их исправить, обратитесь в техподдержку хостинговой компании.
- Заполните всю необходимую информацию на этапе создания базы данных. Она создается на хостинге.
- После заполнения всех обязательных полей создайте администратора сайта.
- Установите шаблон.
- Установите на хостинг систему «Битрикс».
- Авторизуйтесь как администратор по ссылке имя-сайта/bitrix.
- Перейдите в Marketplace — административная панель — обновление решений — активация купона.
- Чтобы активировать купон, введите 25 символов.
- Когда увидите в «Списке обновлений» ваш сайт, выберите его и загрузите.
- Зайдите в «Установку обновлений» и установите сайт.
- Выберите ваш интернет-магазин и загрузите его.
- Перейдите в настройки и установите ваш сайт в разделе «список мастеров».
- После того как появится мастер установки, отметьте пункт «Существующий» и нажмите «Далее».
- На экране «Выбор шаблона» кликните «Далее».
- Выберите цвета и нажмите «Далее».
- Добавьте на сайт актуальную информацию и кликните «Установить».
- На появившемся экране «Завершение настройки» кликните «Перейти на сайт».
Наличие хостинга не всегда влияет на стоимость. Опыт показывает, что иногда параметры хостинга недостаточны для правильной работы сайта и запуска рекламной кампании. Если вы пользуетесь хостингами от провайдеров Timeweb, Ru-Center или Rusonyx, то стоимость будет снижена на ту сумму, которую вы заплатили за хостинг. В остальных случаях обращайтесь к администратору, чтобы обсудить детали.
Если у вас небольшой проект, то мы можем предложить вам простой тариф, чтобы оптимизировать затраты.
В течение года вам доступны следующие услуги:
Для всех продуктов:
- обновление;
- получение новых версий;
- приоритет в получении технической поддержки (ответ в течение 6 рабочих часов);
- резервное копирование;
- использование Маркетплейса;
- доступ к конструктору «Сайты24».
Для «1С-Битрикс: Управления сайтом»:
- обновление системы безопасности;
- доступ к инспектору сайтов;
- возможность ускорять загрузку сайта CDN;
- наличие мобильного приложения администратора (для редакций «Малый бизнес» и «Бизнес»);
- автоматическое формирование бюджета для контекстной рекламы в Яндекс.Директ;
- доступ к функции BigData: Персонализация;
- защита от хакерских атак (DDoS атак).
Для «1С-Битрикс24»
- IP-телефония;
- Автоматическое заполнение данных по ИНН;
- Работа открытых линий:
- настройка и неограниченное создание Открытых линий;
- полный доступ к онлайн-чату;
- каналы коммуникаций исчезают из виджета CRM;
- сообщения на портал из настроенных каналов продолжают приходить;
- настроить каналы нельзя — будет выдаваться ошибка (кроме Онлайн-чата);
- нельзя ответить на сообщения, так как они не приходят.
Если вы не продлите лицензию на следующий год, сайт продолжит работать.
Теперь подробнее остановимся на юридической стороне лицензирования.
Вы оплачиваете право использования программы и получаете 2 лицензии:
- Стандартная. Позволяет пользоваться продуктом, получать обновления, устанавливать решения из Маркетплейса. Также вы получите приоритет при получении технической поддержки. Это относится к блоку «для всех продуктов», описанному выше в этом вопросе. Такая лицензия действует 1 год, после чего ее нужно продлить.
- Ограниченная. Дает право только на использование продукта. В данном случае нет доступа к обновлениям, Маркетплейсу, отсутствует приоритетность при обращении в техподдержку.
Ограниченная лицензия выдается на основании EULA (лицензионного соглашения с конечным пользователем) и не считается в бухгалтерском учете. Ее цель — подтвердить, что вы по праву пользуетесь программой после истечения срока действия основной лицензии.
Ограниченная лицензия действует столько же, сколько и исключительное право на программный продукт (ст. 1281 ГК РФ).
Вы получите продукт по почте в электронном виде. После подтверждения оплаты вам на e-mail придет лицензионный ключ, инструкция по его активации и активации дистрибутива или же купон и инструкция по активации купона.
Мы не доставляем продукты «1С-Битрикс» в физическом виде.