skynet/core-module
Composer 安装命令:
composer require skynet/core-module
包简介
Core module for HostCMS
README 文档
README
Для отработки события после AJAX, в ответе должен быть ключ триггер с массивом:
... 'trigger' => ['(#,.)имя ноды'], ...
Очередь задач --
Очередь задач находится в modules/skynetcore/queue/ и хранит задачи в таблице
skynetcore_queue_tasks. Таблица создается автоматически при первом обращении к
Skynetcore_Queue_Task_Model::ensureTable(), enqueue() или executeNext().
Если таблица уже существует, ensureTable() добавляет недостающие поля.
Основная модель: Skynetcore_Queue_Task_Model.
Поля очереди
Ключевые поля таблицы:
status-pending,processing,done,error.class_name- имя класса-исполнителя задачи.params_json- параметры задачи JSON-строкой.result_json- результат выполнения.error- текст ошибки.priority- приоритет, большее значение выполняется раньше.attempts- количество попыток выполнения.max_attempts- лимит попыток.user_id- авторизованный пользователь HostCMS/API.siteuser_id- авторизованный пользователь сайта.file_name- имя файла-источника, если задача создана из загрузки.common- общий признак для группировки/фильтрации задач, например страна склада.
Класс задачи
Исполнитель задачи должен наследоваться от Skynetcore_Queue_Task_Base и иметь
метод execute().
Пример:
class Skynetcore_Queue_Task_Null extends Skynetcore_Queue_Task_Base
{
public function execute()
{
return [
'status' => 'OK',
'params' => $this->getParams(),
];
}
}
Постановка задачи
$params = [
'example' => 'value',
];
$oTask = Skynetcore_Queue_Task_Model::enqueue(
'Skynetcore_Queue_Task_Null',
json_encode($params, JSON_UNESCAPED_UNICODE),
[
'priority' => 0,
'max_attempts' => 3,
'user_id' => 0,
'siteuser_id' => 0,
'file_name' => '',
'common' => 'Россия',
]
);
params_json должен быть валидной JSON-строкой объекта или массива.
class_name проверяется: класс должен существовать и наследоваться от
Skynetcore_Queue_Task_Base.
Фиксация ошибочной строки без выполнения
Если задачу нужно записать как факт ошибки и не выполнять повторно, используется
enqueueFailed().
Skynetcore_Queue_Task_Model::enqueueFailed(
'Skynetcore_Queue_Task_Null',
json_encode(['row' => 12], JSON_UNESCAPED_UNICODE),
'Строка 12: некорректные данные',
[
'file_name' => 'import.xlsx',
'common' => 'Россия',
]
);
Такая задача создается со статусом error, а attempts сразу равен
max_attempts, поэтому executeNext() ее повторно не возьмет.
Выполнение задач
Выполнить следующую доступную задачу:
$result = Skynetcore_Queue_Task_Model::executeNext();
executeNext() выбирает:
- задачи со статусом
pending; - задачи со статусом
error, еслиattempts < max_attempts.
Порядок выбора: priority DESC, затем id ASC.
Выполнить конкретную задачу:
$oTask = Core_Entity::factory('Skynetcore_Queue_Task')->getById($taskId, false);
$result = $oTask->execute();
Перед долгим выполнением задач из web-запроса рекомендуется закрывать сессию, чтобы не блокировать следующие запросы пользователя:
Core_Session::close();
$result = Skynetcore_Queue_Task_Model::executeNext();
API
Маршрут очереди подключен в modules/skynetcore/module.php:
/skynet/queue/{action}/
Добавление задачи:
POST /skynet/queue/add/
Тело запроса:
{
"class": "Skynetcore_Queue_Task_Null",
"params": {
"example": "value"
},
"priority": 0,
"max_attempts": 3,
"file_name": "import.xlsx",
"common": "Россия"
}
Выполнение задачи:
POST /skynet/queue/execute/
Если передать id, будет выполнена конкретная задача. Если id не передан,
будет выполнена следующая задача из очереди.
Авторизация API использует токены модуля HostCMS API. Токен можно передавать:
Authorization: Bearer <token>X-Restapi-Token: <token>- параметром
token
Пример: перенос товара между складами
Задача переноса товара реализована классом:
Bestos_Zveri_Box_Queue_Task_Good_Move
Пример параметров:
{
"zveri_goods_id": 11285,
"box_from": 1,
"box_to": 3,
"supply_marker": {
"946": {
"to_shipment": 10
}
},
"comment": "Переезд на Патвер"
}
supply_marker имеет структуру:
supply_id => marker => quantity
При переносе товар списывается с указанного маркера и приходит на другой склад на тот же маркер.
skynet/core-module 适用场景与选型建议
skynet/core-module 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.21k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2017 年 10 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 skynet/core-module 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 skynet/core-module 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 1.21k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-10-16