$param1, * 'param2' => $param2, * 'param3' => $param3 * ]); * } * * protected static function getCmd() { * return 'some_task'; * } * * protected static function exec(array $param) { * //Do something * } * } * * // 消费任务的代码实现 * // read from beanstalk * SomeTask::exec($param) * * 增加任务到 beanstalkd 代码 */ 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; } }