iferus / laravel-queue-rabbitmq
Laravel Queue 的 RabbitMQ 驱动。支持 Laravel Horizon。
Requires
- php: ^7.2
- ext-json: *
- illuminate/queue: ^7.0
- php-amqplib/php-amqplib: ^2.11
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- laravel/horizon: ^3.0
- mockery/mockery: ^1.0
- orchestra/testbench: ^4.3
- phpunit/phpunit: ^8.4
Suggests
- ext-pcntl: Required to use all features of the queue consumer.
- 25
- v10.1.3
- v10.1.2
- v10.1.1
- v10.1.0
- dev-master / 10.0.x-dev
- v10.0.2
- v10.0.1
- v10.0.0
- v9.1.2
- v9.1.1
- v9.1.0
- v9.0.x-dev
- v9.0.0
- v8.3.0
- v8.2.0
- v8.1.0
- v8.0.x-dev
- v8.0.0
- v7.5.0
- v7.4.2
- v7.4.1
- v7.4.0
- v7.3.0
- v7.2.0
- v7.1.2
- v7.1.1
- v7.1.0
- v7.0.x-dev
- v7.0.2
- v7.0.1
- v7.0.0
- v6.0.x-dev
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.5.x-dev
- 5.5
- v5.4.x-dev
- 5.4
- v5.3.x-dev
- 5.3
- v5.2.x-dev
- 5.2
- v5.1.x-dev
- 5.1
- v5.0.x-dev
- 5.0
- v4.2.x-dev
- 4.2
- 4.1
- 4.0
This package is auto-updated.
Last update: 2024-09-17 00:13:34 UTC
README
支持策略
只有最新版本会获得新功能。将使用以下方案提供错误修复:
安装
您可以使用以下命令通过 composer 安装此包:
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), ], ], /* * Set to "horizon" if you wish to use Laravel Horizon. */ 'worker' => env('RABBITMQ_WORKER', 'default'), ], // ... ],
可选配置
可选地,向连接的配置中添加队列选项。为此连接创建的每个队列都将获得这些属性。
当您希望在消息延迟时优先处理消息时,可以通过添加额外选项来实现。
- 当省略最大优先级时,当使用时,最大优先级设置为 2。
'connections' => [ // ... 'rabbitmq' => [ // ... 'options' => [ 'queue' => [ // ... 'prioritize_delayed_messages' => false, 'queue_max_priority' => 10, ], ], ], // ... ],
当您想通过路由键发布针对交换的消息时,可以通过添加额外选项来实现。
- 当省略交换时,RabbitMQ 将使用
amq.direct交换来处理路由键。 - 当省略路由键时,默认的路由键是队列的名称。
- 当在路由键中使用
%s时,将替换队列名称。
注意:当使用带有路由键的交换时,您可能需要自己创建队列的绑定。
'connections' => [ // ... 'rabbitmq' => [ // ... 'options' => [ 'queue' => [ // ... 'exchange' => 'application-x', 'exchange_type' => 'topic', 'exchange_routing_key' => '', ], ], ], // ... ],
在 Laravel 中,失败的作业存储在数据库中。但也许您希望指示其他进程也处理消息。当您想指示 RabbitMQ 将失败消息重路由到交换或特定队列时,可以通过添加额外选项来实现。
- 当省略交换时,RabbitMQ 将使用
amq.direct交换来处理路由键。 - 当省略路由键时,默认的路由键是队列名称,替换为
'.failed'。 - 当在路由键中使用
%s时,将替换队列名称。
注意:当使用带有路由键的失败作业交换时,您可能需要自己创建交换/队列的绑定。
'connections' => [ // ... 'rabbitmq' => [ // ... 'options' => [ 'queue' => [ // ... 'reroute_failed' => true, 'failed_exchange' => 'failed-exchange', 'failed_routing_key' => 'application-x.%s', ], ], ], // ... ],
Laravel 使用
完成配置后,您可以使用 Laravel 队列 API。如果您使用过其他队列驱动程序,您不需要更改其他任何内容。如果您不知道如何使用队列 API,请参阅官方 Laravel 文档:https://laravel.net.cn/docs/queues
Laravel Horizon 使用
从 8.0 版本开始,此包默认支持 Laravel Horizon。首先安装 Horizon,然后设置 RABBITMQ_WORKER 为 horizon。
Lumen 使用
对于 Lumen 使用,应在 bootstrap/app.php 中手动注册服务提供程序,如下所示:
$app->register(VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class);
消费消息
有两种方式可以消费消息。
-
queue:work命令是 Laravel 的内置命令。此命令利用basic_get。 -
rabbitmq:consume命令由本包提供。此命令利用basic_consume,比basic_get性能高出约 2 倍。
测试
使用 docker-compose 设置 RabbitMQ
docker-compose up -d rabbitmq
要运行测试套件,可以使用以下命令:
# To run both style and unit tests. composer test # To run only style tests. composer test:style # To run only unit tests. composer test:unit
如果您收到样式测试的错误,您可以使用以下命令自动修复大多数,如果不是全部问题:
composer fix:style
贡献
您可以通过发现错误并打开问题来为此包做出贡献。请指出您创建拉取请求或问题的是哪个包版本。(例如,[5.2] 延迟作业出现致命错误)