ivan-grebnev / laravel-rabbitmq
Laravel 队列 RabbitMQ 驱动程序。
0.7.0
2024-08-09 11:33 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- illuminate/queue: ^8.64 || ^9.0 || ^10.0 || ^11.0
- php-amqplib/php-amqplib: ^3.0
README
默认情况下,Laravel 框架不包括队列功能的 RabbitMQ 驱动程序。此软件包增加了对此消息代理的兼容性。
您还可以与其他不支持 Laravel 原生队列消息格式的系统交换消息。
安装
只需通过 Composer 安装此软件包
composer require ivan-grebnev/laravel-rabbitmq
并在 .env
文件中设置环境变量和用于连接 RabbitMQ 服务器的凭据,例如
RABBITMQ_HOST=some.hostname # or IP-address RABBITMQ_PORT=5672 RABBITMQ_USER=guest RABBITMQ_PASSWORD=guest RABBITMQ_VHOST=/
配置
默认配置位于 src/config/default.php
。您可以在项目的 config/queue.php
中的 rabbitmq 部分覆盖任何配置选项,例如
... 'rabbitmq' => [ 'tasks' => [ // parameters of concrete task 'SomeSend' => [ 'exchange' => 'Some.Send.Exchange', 'routing_key' => 'Any.Routing.Key', ], 'SomeRecieve' => [ 'queue' => 'Some.Recieve.Queue', 'job' => \App\Jobs\Exchange\RecieveJob::class, ] ], // here default parameters for all tasks 'defaults' => [ 'worker_job' => \App\Jobs\Exchange\CustomWorkerJob::class, 'exchange_type' => 'topic', 'consume_no_ack' => true, ], ], ...
对于所有任务配置,都从 "defaults" 部分获取,但在具体任务的参数中可以覆盖。
您可以在带有注释的源配置文件中看到所有可能的设置 https://github.com/ivan-grebnev/laravel-rabbitmq/blob/master/src/config/default.php。
任务
任务 是什么意思?Laravel 使用 "queue" 一词来指代应用程序与队列服务器之间的消息通道。但是 RabbitMQ 消息代理还有一个作为入口点的 exchange,并且 exchange 可以与 queue 有相同的名称。因此,引入了 task 的概念来分离配置设置。因此下面的示例将工作
// config/queue.php ... 'rabbitmq' => [ 'tasks' => [ 'UsersSendTask' => [ 'exchange' => 'Site.Users', ], 'UsersRecieveTask' => [ 'queue' => 'Site.Users', 'job' => \App\Jobs\Exchange\UsersRecieveJob::class, ] ], 'defaults' => [ 'worker_job' => \App\Jobs\Exchange\CustomWorkerJob::class, ], ], ...
这在这种情况下是必要的,即当 RabbitMQ 队列不仅用于应用程序的内部需求,而且还用于与其他系统交换数据时,我们将消息推送到一个交换或队列,并从其他队列中拉取我们的消息。
因此,在软件包源中,task 就像 Laravel 中的 queue,而 queue 则是 RabbitMQ 的确切 queue。因此,要执行上面的示例
UsersSendJob::dispatch()->onConnection('rabbitmq')->onQueue('UsersSendTask');
和
artisan queue:work rabbitmq --queue=UsersRecieveTask
自定义作业
有三种类型的作业
- 发送到交换 / 队列作业
- 由工作者拉取作业
- 执行作业
...待续...