rocketslab / rabbitmq-actions
为Laravel的vladimir-yuldashev RabbitMQ队列提供动作包装
Requires
- php: ^8.0
- vladimir-yuldashev/laravel-queue-rabbitmq: ^11.3|^12.0
README
此包是vladimir-yuldashev/rabbitmq-queue-laravel的包装。
添加了使用RabbitMQ/AMQP协议生产和消费消息的新功能。
安装和需求
需求
- PHP 8.0 +
- Laravel 8.0 +
- RabbitMQ驱动程序为Laravel Queue 12.0+
使用Composer安装此包
composer require rocketslab/rabbitmq-actions
配置Laravel Queue的RabbitMQ驱动程序
遵循vladimir-yuldashev/rabbitmq-queue-laravel
的安装说明。
如何在RLQ文档中配置yuldashev/rabbitmq-queue-laravel。
发布配置
php artisan vendor:publish --provider=RocketsLab\\RabbitMQActions\\RabbitMQActionsServiceProvider
默认动作命名空间是App\RabbitMQ\Actions
,将动作保存在app/RabbitMQ/Actions
文件夹中。您可以通过namespace
配置来更改此设置。例如
config/rabbitmq-actions.php
... 'namespace' => 'MyDomain\\Actions' ...
当创建新动作时,这些动作将保存在app/MyDomain/Actions
目录中,并且您的动作命名空间将更改为App\MyDomain\Actions
。
创建动作
创建此包的动机是为了找到一种简化通过RabbitMQ发送和接收消息的方法。我发现实现这一目标的一种方法就是使用动作来定义从生产者发送并被消费者作为动作处理的消息类型。
要创建一个动作,请使用artisan make:rmq-action
命令。
php artisan make:rmq-action MyAction
动作文件看起来像这样
namespace App\RabbitMQ\Actions; use RocketsLab\RabbitMQActions\Contracts\Action; class MyAction implements Action { /** * Handles the message data * * @param mixed $data * */ public function handle(mixed $data) { // Process the message data from broker } }
消息数据内容在Action处理方法中传递。
动作会自动注册到Laravel容器中。这种行为会在消费者接收到消息时立即启动动作。
生产消息
安装此包并将应用程序配置为作为生产者发送消息非常简单。此包的ProducerMessage
类有一个名为send
的单个方法,它接受三个参数:$action
、$data
和一个可选的$queue
。
action参数是动作的名称,它将消费者应用程序中动作的名称进行翻译。
data参数是要发送给消费者的内容数据。
queue参数是队列的名称。默认为Laravel队列default
。
例如:ProduceMessage::send('my-action', 'hello')
,my-action
是消费者自动注册的MyAction
类。
自定义动作
默认动作名称是动作类名称的kebab
形式。
但有时您可能想更多地控制动作的名称。要自定义动作“键”,请在配置文件中将此选项注册到custom_actions
选项中。
config/rabbitmq-actions.php
... 'custom_actions' => [ 'hello-action' => MyAction::class ]; ...
在生产者应用程序中
ProducerMessage::send('hello-action', 'world!');
在消费者应用程序中
MyAction handle method its called
目前,一旦使用此选项,自动注册将被禁用,您必须在这里注册所有动作。
路线图
这是一个正在进行中的项目。将来可以创建更多功能。
感谢!
请不要忘记在这里留下星标,如果我在任何方面有所帮助;)
Jorge <@jjsquady> Gonçalves