{{wikiTitle}}
开发新队列
目录:
消息队列整个流程分为生产和消费,生产有由程序发起。消费由命令执行。
消息队列文件一般存放在app/jobs
目录下。可以以一个类为一个队列进行开发,或者一个类中有多个小队列都能加入生产进行消费。目前推荐一个类为一个队列进行开发。
示例
例如:新增记录管理员操作日志队列
创建文件 app\jobs\AdminLogJob.php
handle
方法中一定要返回执行的结果,例如返回true
,证明当前逻辑执行完成,没有任何问题不需要二次执行.会立即销毁当前队列;
如果因某个逻辑执行错误返回false
或者0
或者null
或者空字符串都认定本次执行的任务失败,需要再次加入队列继续执行一次,直到执行返回成功为止。或者执行3次后也会自动销毁当前队列。
namespace app\jobs;
use app\services\system\log\SystemLogServices;
use crmeb\basic\BaseJobs;
use crmeb\traits\QueueTrait;
/**
* 后台日志
* Class AdminLogJob
* @package app\jobs
*/
class AdminLogJob extends BaseJobs
{
use QueueTrait;
public function handle($adminId, $adminName, $module, $rule, $ip, $type)
{
//写入数据库逻辑
//必须返回执行最后的结果
return true;
}
public function test()
{
//测试小队列执行
return true;
}
}
使用日志记录队列
use app\jobs\AdminLogJob;
//加入队列默认会直接执行handle内的逻辑
AdminLogJob::dispatch([$adminId, $adminName, $module, $rule, $ip, $type]);
//加入延迟队列,延迟600秒后执行,默认执行handle内的逻辑
AdminLogJob::dispatchSece(600, [$adminId, $adminName, $module, $rule, $ip, $type]);
//加入队列,执行AdminLogJob内的test方法
AdminLogJob::dispatchDo('test', [$adminId, $adminName, $module, $rule, $ip, $type]);
//加入延迟队列,延迟600秒后执行,执行AdminLogJob内的test方法
//建议一个队列处理一个逻辑,当前示范的是多个小队列
AdminLogJob::dispatchDo('test', [$adminId, $adminName, $module, $rule, $ip, $type], 600);
调试队列
以下为调试队列的写法,不能使用在正常流程中,只为了调试使用。
use app\jobs\AdminLogJob;
//直接实例化调试当前job时候执行成功
$res = (new AdminLogJob)->handle($adminId, $adminName, $module, $rule, $ip, $type);
var_dump($res);
{{cateWiki.like_num}}人点赞
0人点赞
评论({{cateWiki.comment_num}})
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
{{cateWiki.page_view_num}}人看过该文档
评论(0)
{{commentWhere.order ? '评论从旧到新':'评论从新到旧'}}
220人看过该文档
{{item.user ? item.user.nickname : ''}} (自评)
{{item.content}}
{{item.create_time}} 删除
{{item.like ? item.like.like_num : 0}}
{{replyIndex == index ? '取消回复' : '回复'}}
搜索结果
为您找到{{wikiCount}}条结果
位置:{{path.name}} {{(i+1) == item.catalogue.path_data.length ? '':'/'}}
{{item.page_view_num}}
{{item.like ? item.like.like_num : 0}}
{{item.comment ? item.comment.comment_num : 0}}