12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- /**
- * @author: liaofei<136327134@qq.com>
- * @day: 2020/5/28
- */
- namespace crmeb\basic;
- use crmeb\interfaces\JobInterface;
- use think\facade\Log;
- use think\queue\Job;
- /**
- * 消息队列基类
- * Class BaseJob
- * @package crmeb\basic
- */
- class BaseJob implements JobInterface
- {
- /**
- * @param $name
- * @param $arguments
- */
- public function __call($name, $arguments)
- {
- $this->fire(...$arguments);
- }
- /**
- * @param Job $job
- * @param $data
- */
- public function fire(Job $job, $data): void
- {
- try {
- $action = $data['do'] ?? 'doJob';//任务名
- $infoData = $data['data'] ?? [];//执行数据
- $errorCount = $data['errorCount'] ?? 0;//最大错误次数
- $log = $data['log'] ?? null;
- if (method_exists($this, $action)) {
- if ($this->{$action}(...$infoData)) {
- //删除任务
- $job->delete();
- //记录日志
- $this->info($log);
- } else {
- if ($job->attempts() >= $errorCount && $errorCount) {
- //删除任务
- $job->delete();
- //记录日志
- $this->info($log);
- } else {
- //从新放入队列
- $job->release();
- }
- }
- } else {
- $job->delete();
- }
- } catch (\Throwable $e) {
- $job->delete();
- Log::error('执行消息队列发成错误,错误原因:' . $e->getMessage());
- }
- }
- /**
- * 打印出成功提示
- * @param $log
- * @return bool
- */
- protected function info($log)
- {
- try {
- if (is_callable($log)) {
- print_r($log() . "\r\n");
- } else if (is_string($log) || is_array($log)) {
- print_r($log . "\r\n");
- }
- } catch (\Throwable $e) {
- print_r($e->getMessage());
- }
- }
- /**
- * 任务失败执行方法
- * @param $data
- * @param $e
- */
- public function failed($data, $e)
- {
- }
- }
|