记录下这两天用laravel使用rabbitmq的情况
按照这个视频学的:
https://www.bilibili.com/video/BV1a5411J7k6/
- 安装rabbitmq跟erlang的步骤网上应该有 就不详细说了
- 主要还是使用command在控制台挂着,然后用dispatch方法将数据放进去执行就行了
引入依赖和修改env文件配置
具体的引入及修改 config/queue.php 方法在下面链接
https://github.com/vyuldashev/laravel-queue-rabbitmq
# rabbit-mq
QUEUE_CONNECTION=rabbitmq
QUEUE_DRIVER=rabbitmq
RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
RABBITMQ_USER=rabbituser_test1
RABBITMQ_PASSWORD=rabbituser_test1
RABBITMQ_VHOST=/
RABBITMQ_QUEUE=shop_queue
QUEUE_CONNECTION属性env文件自带一个,删了就行
创建command
php artisan make:command TestEvent
创建job
php artisan make:job TestJob
然后修改两个文件的方法
TestEvent.php
class TestEvent extends Command
{
/**
* The name and signature of the console command.
* 这里的signature就是在控制台运行的命令:php artisan test
* @var string
*/
protected $signature = 'test';
public function handle()
{
TestJob::dispatch();
}
}
TestJob.php
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
echo "Job has been created at ".Carbon::now()->format('H:i:s').PHP_EOL;
}
}
最重要的一个
修改App\Providers\EventServiceProvider.php中的boot方法
加上刚刚创建的TestJob
class EventServiceProvider extends ServiceProvider
{
public function boot()
{
App::bindMethod(TestJob::class,'@handle',function ($job){
return $job->handle();
});
}
}
运行
- 首先打开一个终端运行队列
php artisan queue:work
- 再打开一个终端发送消息
php artisan test
效果如图:出现绿色的这一行Processed的就算执行成功了
贴一下自己测试的一段代码吧
// controller的
public function publish($sku_id, $status)
{
$data = ['id' => $sku_id,'status' => $status];
ProductJob::dispatch($data);
}
job代码
class ProductJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Execute the job.
* @return void
*/
public function handle()
{
$data = $this->data;
$productId = $data['id'];
$status = $data['status'];
SkuInfo::query()->find($productId)->update(['publish_status' => $status]);
}
}