laravel8框架集成RabbitMQ队列驱动程序
Laravel  /  管理员 发布于 2年前   1058
环境介绍
rabbitmq服务使用:CloudAMQP
在laravel框架中安装使用步骤
rabbitmq扩展包git:
https://github.com/vyuldashev/laravel-queue-rabbitmq
composer安装rabbitmq扩展包
composer require vladimir-yuldashev/laravel-queue-rabbitmq
.env文件信息获取配置:
QUEUE_CONNECTION=rabbitmq
#需要申请
RABBITMQ_HOST=shark.rmq.cloudamqp.com
RABBITMQ_PORT=5672
RABBITMQ_USER=xxx
RABBITMQ_PASSWORD=xxx
RABBITMQ_VHOST=xxx
RABBITMQ_QUEUE=admin_queue #自定义
队列配置:config/queue.php
'connections' => [
'rabbitmq' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
'hosts' => [
[
'host' => env('RABBITMQ_HOST', '127.0.0.1'),
'port' => env('RABBITMQ_PORT', 5672),
'user' => env('RABBITMQ_USER', 'guest'),
'password' => env('RABBITMQ_PASSWORD', 'guest'),
'vhost' => env('RABBITMQ_VHOST', '/'),
],
],
'options' => [
'ssl_options' => [
'cafile' => env('RABBITMQ_SSL_CAFILE', null),
'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
],
'queue' => [
'job' => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class,
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
],
队列使用
生成任务类
php artisan make:job TestJob
<?php
namespace App\Jobs;
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;
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private array $data = [];
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
sleep(3);
var_dump($this->data);
}
}
ps:
在队列处理任务时,会调用 handle 方法,而这里我们也可以通过 handle 方法的参数类型提示,让 Laravel 的 服务容器 自动注入依赖对象。
如果你想完全控制容器如何将依赖对象注入至 handle 方法,可以使用容器的 bindMethod 方法。
bindMethod 方法接受一个任务和容器的回调。
虽然可以直接在回调中可以调用 handle 方法,但建议应该从 service provider 调用为佳:
#官方写法
use App\Jobs\ProcessPodcast;
$this->app->bindMethod(ProcessPodcast::class.'@handle', function ($job, $app) {
return $job->handle($app->make(AudioProcessor::class));
});
\App::bindMethod(TestJob::class . '@handle', function ($job){
return $job->handle();
});
//php7.4写法
\App::bindMethod(ProductCreated::class . '@handle', fn($job) => $job->handle());
任务分发并指定队列
use App\Jobs\TestJob;
TestJob::dispatch(['title'=>'testjob'])->onQueue('admin_queue');
运行启动
#--host=0.0.0.0指定外网,不然访问不了
#--port=8080指定端口
php artisan serve --host=0.0.0.0 --port=8080
php artisan queue:work
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号