belamov / laravel-rabbitmq-listener
此包允许您通过 artisan 命令监听 RabbitMQ 事件
Requires
- php-amqplib/php-amqplib: ^2.7
This package is auto-updated.
Last update: 2020-04-07 22:45:53 UTC
README
此包为您提供了 artisan 命令,用于监听来自各个队列的 RabbitMQ 事件。
基本用法
1) 配置
安装包后,使用 php artisan vendor:publish 命令发布其配置。
在您的配置文件夹中,根据需要自定义 rabbitmq_listener.php 文件。
可用的配置参数包括
- events - 您希望监听哪些事件以及每个事件由哪个类负责
- ignored_events - 您希望忽略哪些事件
- queues - 您希望监听哪些队列
- reject_events - 确定您是否想拒绝传入的事件(这在调试期间很有用)
- acknowledge_events - 确定您是否想确认事件(这在调试期间很有用)
要连接到 RabbitMQ,请将以下参数添加到您的 .env 文件中
- RABBITMQ_LISTENER_HOST
- RABBITMQ_LISTENER_PORT
- RABBITMQ_LISTENER_USER
- RABBITMQ_LISTENER_PASSWORD
- RABBITMQ_LISTENER_VHOST
2) 实现 abstract event parser
在您的应用程序中,必须创建一个扩展 Belamov\RabbitMQListener\AbstractEventParser 类的类
此抽象类包含以下方法
abstract public function setEventPayload(string $payload); abstract public function getEventName(); abstract public function getEventPayload();
setEventPayload($payload) 在创建事件解析器时被调用。 $payload 是来自 RabbitMQ 事件的字符串。
getEventName() 用于确定将使用哪个事件处理器。如果您只有一种类型的事件,只需使其返回特定的值,然后在 rabbitmq_listener.php 文件中的 events 参数中进行配置即可
getEventPayload() 在实例化事件处理器时使用。返回的值注入到处理器的构造函数中。
创建解析器类后,您应将其注册到您的 appServiceProvider.php 文件中。
只需将以下代码添加到 register() 方法中
$this->app->bind( 'Belamov\RabbitMQListener\AbstractEventParser', 'Your\Namespace\<Your class name>' );
3) 添加您的事件处理器
为了处理事件,创建扩展 Belamov\RabbitMQListener\EventHandlers\EventHandler 类的类
此类需要从您的 getEventPayload() 方法返回的有效负载
process() 方法可以返回一些信息,当您处理事件时将在控制台返回
您还可以在 process 方法中抛出 Belamov\RabbitMQListener\Exceptions\EventParsingException。如果抛出,则事件将被拒绝而不会重新调度(如果您在配置文件中将 reject_events 设置为 true)
4) 运行命令
运行 php artisan rabbitmq:listen 命令。您还可以将此进程放在 supervisor 中,以便不断重新运行。