laravel 集成rabbitmq

一、免费申请rabbitmq账号

管理世界上最大的RabbitMQ集群
rabbitmq管理器

二、 安装rabbitmq软件包

官方地址

composer require vladimir-yuldashev/laravel-queue-rabbitmq

三、配置

# 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'),
            ],

    ],
#.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 #自定义

四、使用

 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);
    }
}

在队列处理任务时,会调用 handle 方法,而这里我们也可以通过 handle 方法的参数类型提示,让 Laravel 的 服务容器 自动注入依赖对象。

如果你想完全控制容器如何将依赖对象注入至 handle 方法,可以使用容器的 bindMethod 方法。bindMethod 方法接受一个任务和容器的回调。虽然可以直接在回调中可以调用 handle 方法,但建议应该从 service provider 调用为佳:

#App\Providers\EventServiceProvider;
#官方写法
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'=>'111111111'])->onQueue('admin_queue');;

五、启动

#--host=0.0.0.0不指定外网访问不了
#--port=8080指定端口
php artisan serve --host=0.0.0.0 --port=8080
php artisan queue:work
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!