| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?php
- namespace crmeb\services\async\task;
- use crmeb\utils\Beanstalk;
- use think\facade\Config;
- use think\facade\Log;
- abstract class Task {
- /**
- * 得到任务 cmd 标识, 任务类别
- *
- * @return string
- */
- abstract protected static function getCmd();
- /**
- * 执行从 beanstalkd 中取出的任务数据 $task.
- *
- * @return boolean
- */
- abstract public static function exec(array $task);
- /**
- * 任务自由的数据都叫 params
- * 这个函数打包成任务数据
- * @return array
- */
- protected static function formatJob(array $params)
- {
- return [
- 'cmd' => static::getCmd(),
- 'ts' => time(),
- 'sender' => '0',
- 'params' => $params,
- ];
- }
- /**
- * 插入任务到 beanstalk
- *
- * @params 具体某个任务需要的参数
- * @return boolean
- */
- protected static function put(array $params)
- {
- $bean = Beanstalk::instance();
- $tube = Config::get('app.beanstalk_tube', 'twong');
- $arr = self::formatJob($params);
- $json = json_encode($arr);
- try {
- $bean::useTube($tube)->put($json);
- } catch (\Exception $e) {
- Log::error('beanstalk put failed: ' . $json . ' error:' . $e->getMessage());
- return false;
- }
- return true;
- }
- /**
- * job 格式基本检查
- *
- * @return boolean
- */
- protected static function checkTask($task)
- {
- if (!$task || !isset($task['cmd']) || $task['cmd'] != self::getCmd()) {
- Log::error('task format error: null or invalid cmd');
- return false;
- }
- if (!isset($task['params']) || !is_array($task['params'])) {
- Log::error('task format error: without params or not an array.');
- return false;
- }
- return true;
- }
- }
|