pablicio / mirabel-rabbitmq
基于php-amqplib库,简化PHP中RabbitMQ使用的库,通过抽象其使用来简化使用过程。
v1.0.5
2023-04-18 01:23 UTC
Requires
- php-amqplib/php-amqplib: ^3.5
README
mirabel-rabbitmq
基于php-amqplib库,简化PHP中RabbitMQ使用的库,通过抽象其使用来简化使用过程。
安装
composer require pablicio/mirabel-rabbitmq
如何在Laravel中配置
运行发布者,它将在config/mirabel_rabbitmq.php中创建文件
php artisan vendor:publish --provider="Pablicio\MirabelRabbitmq\MirabelRabbitmqServiceProvider"
然后只需根据您的环境进行配置。
<?php return [ 'connections' => [ 'rabbitmq-php' => [ 'host' => env('MB_RABBITMQ_HOST', 'localhost'), 'port' => env('MB_RABBITMQ_PORT', 5672), 'user' => env('MB_RABBITMQ_USER', 'guest'), 'password' => env('MB_RABBITMQ_PASSWORD', 'guest'), 'exchange' => env('MB_RABBITMQ_EXCHANGE', 'my-exchange'), 'exchange_type' => env('MB_RABBITMQ_EXCHANGE_TYPE', 'topic'), 'exchange_passive' => env('MB_RABBITMQ_EXCHANGE_PASSIVE', false), 'exchange_durable' => env('MB_RABBITMQ_EXCHANGE_DURABLE', true), 'exchange_auto_delete' => env('MB_RABBITMQ_EXCHANGE_DELETE', false), 'exchange_nowait' => env('MB_RABBITMQ_EXCHANGE_NOWAIT', false), 'exchange_arguments' => env('MB_RABBITMQ_EXCHANGE_ARGUMENTS', []), 'exchange_ticket' => env('MB_RABBITMQ_EXCHANGE_TICKET', null) ], ] ];
使用示例
创建发布者类
<?php namespace App\Events; use Pablicio\MirabelRabbitmq\RabbitMQEventsConnection; class OrderReceivedEvent { use RabbitMQEventsConnection; const ROUTING_KEY = 'my-service.request-orders.received'; function __construct($payload) { $this->routingKey = self::ROUTING_KEY; $this->payload = $payload; } }
如何调用发布者
(new App\Events\OrderReceivedEvent('ReceivedPayload'))->publish()
创建监听器类
<?php namespace App\Workers; use Pablicio\MirabelRabbitmq\RabbitMQWorkersConnection; class OrderReceivedWorker { use RabbitMQWorkersConnection; const QUEUE = 'my-service.request-test', routing_keys = [ 'my-service.request-orders.received' ], options = [ 'exchange_type' => 'topic' ], retry_options = [ 'x-message-ttl' => 1000, 'max-attempts' => 8 ]; public function work($msg) { try { print_r($msg->body); return $this->ack($msg); } catch (\Exception $e) { return $this->nack($msg); } } }
如何调用订阅者
(new App\Workers\OrderReceivedWorker)->subscribe();
函数
options 参数
必须声明options数组。如果为空,我们将假设.env的设置
retry_options 参数
如果您传递空的options数组,我们将假设.env的设置;如果您不想使用重试,请删除retry_options数组。
免责声明:我们不对其使用负责
这个库仍在开发中,所以它不能在许多场景下正常工作,它是用于测试和学习的,如果您使用它,请自行承担风险。我很快会回来发展,但为此我需要社区的帮助,如果您想为PR感到像所有者一样,我的联系邮箱是 pabliciotjg@gmail.com
待办事项
- 在publish()方法中添加可观察性属性作为参数,如traker_id等更多元数据。
- 成为对其他框架的无感知
- 添加单元测试
- 改进文档
