1.安装
composer require vladimir-yuldashev/laravel-queue-rabbitmq
2.修改配置
QUEUE_CONNECTION=redis
3.创建job
php artisan make:job Queue
<?php
namespace App\Jobs;
use App\Models\Good;
use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
class Queue implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $oid;
public $display;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($oid,$display)
{
$this->oid=$oid;
$this->delay($display);
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
DB::beginTransaction();
try {
$result=Order::where('id',$this->oid)->first();
if($result->status==0){
$res=$result->update(['status'=>3]);
if($res){
$goods=Good::where('id',$result['goods_id'])->first();
$number=[
'sum'=>$goods->sum+$result->num,
'freeze_num'=>$goods->freeze_num-$result->num
];
$goods->update($number);
}
DB::commit();
echo "半小时内未支付,订单已失效";
}
}
catch (\Exception $e){
DB::rollBack();
}
}
}
4.控制器调用
/**
*$order->id 订单id
*$time 延迟时间
*/
$this->dispatch(new Queue($order->id,$time));
5.命令行执行消费
php artisan queue:work
laravel8中rabbitmq的使用:RabbitMQ在Laravel中的使用 - 掘金