1、先简单来个路由,在/routes/api.php
Route::get('machine_export',[Admin\Machine\MachineController::class,'export']);//机具导出
2、然后在所属控制器新增方法。
/**
* 机具导出
*
* @return \Illuminate\Http\Response
*/
public function export(Request $request)
{
try {
$exports = Export::create([
'task_no' => 'EXP'.date('YmdHis').rand(1000,9999),
'table' => 'machines',
'params' => json_encode(array_merge($request->input(),['brands'=>$request->get('brands')])),
'remark' => '机具导出',
'operate' => $request->get('user')->account,
'attributes'=> json_encode($request->get('user')),
'state' => 0,
'brands_id' => $request->get('brands')
]);
MachineExportJob::dispatch($exports)->onQueue('machineExport');
return response()->json(['code' => 'success', 'msg' => '操作成功,请稍后去导出列表查看']);
} catch (\Throwable $th) {
return response()->json(['code' => 'error', 'msg' => '系统错误']);
}
}
onQueue方法代表启用异步队列,并且指定list名称为machineExport,如果不使用onQueue方法,那么代表你的请求会是同步执行,那样子会延长程序处理时间。
3、新增一个job
php artisan make:job export\MachineExportJob
他将会在app/jobs/export/MachineExportJob.php新增一个文件,你可以在该文件编写你的异步业务逻辑,编写完成。
4、测试请求
5、去redis里面找找待消费的数据
redis-cli -a 123456
一共有两个两个list,一个记录待消费数据,一个记录个数。
127.0.0.1:6379> lrange _database_queues:machineExport 0 1
1) "{\"uuid\":\"7b8babc7-1579-434e-b2d9-85f21d8ce501\",\"displayName\":\"App\\\\Jobs\\\\export\\\\MachineExportJob\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"maxExceptions\":null,\"failOnTimeout\":false,\"backoff\":null,\"timeout\":3600,\"retryUntil\":null,\"data\":{\"commandName\":\"App\\\\Jobs\\\\export\\\\MachineExportJob\",\"command\":\"O:32:\\\"App\\\\Jobs\\\\export\\\\MachineExportJob\\\":14:{s:7:\\\"timeout\\\";i:3600;s:10:\\\"\\u0000*\\u0000exports\\\";O:45:\\\"Illuminate\\\\Contracts\\\\Database\\\\ModelIdentifier\\\":4:{s:5:\\\"class\\\";s:17:\\\"App\\\\Models\\\\Export\\\";s:2:\\\"id\\\";i:26;s:9:\\\"relations\\\";a:0:{}s:10:\\\"connection\\\";s:5:\\\"mysql\\\";}s:9:\\\"\\u0000*\\u0000params\\\";O:8:\\\"stdClass\\\":1:{s:6:\\\"brands\\\";i:1;}s:12:\\\"\\u0000*\\u0000adminUser\\\\u0000adminUser\\\";O:8:\\\"stdClass\\\":7:{s:7:\\\"account\\\";s:5:\\\"admin\\\";s:4:\\\"name\\\";s:15:\\\"\xe8\xb6\x85\xe7\xba\xa7\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98\\\";s:5:\\\"state\\\"\\\";i:1;s:7:\\\"r;i:1;s:5:\\\"rules\\\";i:1;s:7:\\\"role_id\\\";i:1;s:11:\\\"is_external\\\";s:0:\\\"\\\";s:7:\\\"pattern\\\";s:0:\\\"\\\";}s:3:\\\"job\\\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";s:13:\onnection\\\";N;s:\\"machineExport\\\";s:15:\\\"chainConnection\\\";N;s:10:\\\"chainQueue\\\";N;s:19:\\\"chainCatchCallbacks\\\";N;s:5:\\\"delay\\\";N;s:11:\\\"afterCommit\\\";N;s:10:\\\"middleware\\\";a:0:{}saSsDxmbbMLntg16PC\:7:\\\"chained\\\";a:0:{}}\"},\"id\":\"3GzeSqI3NB4rAojaSsDxmbbMLntg16PC\",\"attempts\":0}"
127.0.0.1:6379> lrange _database_queues:machineExport:notify 0 2
1) "1"
127.0.0.1:6379>
6、消费list数据
php artisan queue:listen --queue=machineExport
会有提示信息。
[2023-07-07 18:11:18][3GzeSqI3NB4rAojaSsDxmbbMLntg16PC] Processing: App\Jobs\export\MachineExportJob
[2023-07-07 18:11:19][3GzeSqI3NB4rAojaSsDxmbbMLntg16PC] Processed: App\Jobs\export\MachineExportJob
7、消费完成。