|
|
@@ -15,7 +15,8 @@ use think\facade\Log;
|
|
|
* 首先根据特定的任务,实现一个子类, 比如 SomeTask
|
|
|
*
|
|
|
* class SomeTask extends Task {
|
|
|
- * public static function push($param1, $param2, $param3) {
|
|
|
+ * //客户端调用,异步执行
|
|
|
+ * public function push($param1, $param2, $param3) {
|
|
|
* self::put([
|
|
|
* 'param1' => $param1,
|
|
|
* 'param2' => $param2,
|
|
|
@@ -23,11 +24,11 @@ use think\facade\Log;
|
|
|
* ]);
|
|
|
* }
|
|
|
*
|
|
|
- * protected static function getCmd() {
|
|
|
+ * protected function getCmd() {
|
|
|
* return 'some_task';
|
|
|
* }
|
|
|
*
|
|
|
- * protected static function exec(array $param) {
|
|
|
+ * protected function exec(array $param) {
|
|
|
* //Do something
|
|
|
* }
|
|
|
* }
|
|
|
@@ -44,24 +45,33 @@ abstract class Task {
|
|
|
*
|
|
|
* @return string
|
|
|
*/
|
|
|
- abstract protected static function getCmd();
|
|
|
+ abstract public function getCmd() : string;
|
|
|
|
|
|
/**
|
|
|
* 虚函数。执行从 beanstalkd 中取出的任务数据 $task.
|
|
|
*
|
|
|
* @return boolean
|
|
|
*/
|
|
|
- abstract public static function exec(array $task);
|
|
|
+ abstract protected function _exec(array $params);
|
|
|
+
|
|
|
+ public function exec($task)
|
|
|
+ {
|
|
|
+ if (!$this->checkTask($task)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $this->_exec($task['params']);
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 任务自由的数据都叫 params
|
|
|
* 这个函数打包成任务数据
|
|
|
* @return array
|
|
|
*/
|
|
|
- protected static function formatJob(array $params)
|
|
|
+ protected function formatJob(array $params)
|
|
|
{
|
|
|
return [
|
|
|
- 'cmd' => static::getCmd(),
|
|
|
+ 'cmd' => $this->getCmd(),
|
|
|
'ts' => time(),
|
|
|
'sender' => '0',
|
|
|
'params' => $params,
|
|
|
@@ -74,11 +84,11 @@ abstract class Task {
|
|
|
* @params 具体某个任务需要的参数
|
|
|
* @return boolean
|
|
|
*/
|
|
|
- protected static function put(array $params)
|
|
|
+ protected function put(array $params)
|
|
|
{
|
|
|
$bean = Beanstalk::instance();
|
|
|
$tube = Config::get('app.beanstalk_tube', 'twong');
|
|
|
- $arr = self::formatJob($params);
|
|
|
+ $arr = $this->formatJob($params);
|
|
|
$json = json_encode($arr);
|
|
|
try {
|
|
|
$bean::useTube($tube)->put($json);
|
|
|
@@ -94,9 +104,9 @@ abstract class Task {
|
|
|
*
|
|
|
* @return boolean
|
|
|
*/
|
|
|
- protected static function checkTask($task)
|
|
|
+ protected function checkTask($task)
|
|
|
{
|
|
|
- if (!$task || !isset($task['cmd']) || $task['cmd'] != self::getCmd()) {
|
|
|
+ if (!$task || !isset($task['cmd']) || $task['cmd'] != $this->getCmd()) {
|
|
|
Log::error('task format error: null or invalid cmd');
|
|
|
return false;
|
|
|
}
|