chocofamilyme / pubsub-life
实现 Pub/Sub 模式的库
4.1.2
2020-09-10 09:37 UTC
Requires
- php-amqplib/php-amqplib: ^2.11
Requires (Dev)
- codeception/codeception: ~3.0
- ramsey/uuid: ^3.9
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-10 18:40:48 UTC
README
该库实现了应用程序的事件驱动架构(Event-Driven Architecture)。
工作示例请查看这里: https://github.com/chocofamilyme/pubsub-life/tree/master/examples
功能
- 无事务发布事件
- 订阅事件
- 如有需要,可以重复将事件发送到同一个队列
要求
- PHP >=5.6
- PHP ext-sockets
安装
composer require chocofamilyme/pubsub-life
配置
目前该库仅支持与 RabbitMQ 一起工作,如有需要可以添加其他支持。
配置配置文件
'eventsource' => [ 'default' => env('MESSAGE_BROKER', 'rabbitmq'), 'drivers' => [ 'rabbitmq' => [ 'adapter' => 'RabbitMQ', 'host' => env('EVENTSOURCE_HOST', 'eventsource'), 'port' => env('EVENTSOURCE_PORT', '5672'), 'user' => env('EVENTSOURCE_USER', 'guest'), 'password' => env('EVENTSOURCE_PASSWORD', 'guest'), ], ], ]
完整列表请查看 - https://github.com/php-amqplib/php-amqplib
使用
对于 RabbitMQ,变量 $routeKey
必须至少包含两个由点 .
分隔的部分。例如 order.created
。Exchange 的名称将包含第一个部分,即 order
。之后,如果您进入 rabbitmq 的管理员界面,应该会创建一个名为 order
的 exchange。
更新:从版本 2.* 开始,可以指定 exchange
并将其与 $routeKey
路由关联。
更新:从版本 2.* 开始,可以指定 exchange
并将其与路由关联。现在可以指定一个路由数组。
要回送消息到队列,需要在回调函数中抛出 Chocofamily\PubSub\Exceptions\RetryException
异常。消息最多可以重复处理 5 次,之后它将进入死信队列(exchange = DLX)。
可以向订阅者传递以下配置
待办事项
- 实现事务性(可能需要包装库)
- 实现中间件对象以实现不同的处理器(日志记录、异常处理、重试回调函数等)
- 覆盖测试(50%)