aztech / events
支持AMQP、WAMP、Stomp、Redis、PDO等的PHP事件库
Requires
- aztech/event-bus: ~1
- aztech/event-bus-core-plugins: ~1
- aztech/event-bus-extra-plugins: ~1
- aztech/event-dispatcher: ~1
Requires (Dev)
- phpunit/phpunit: ~4.2
- squizlabs/php_codesniffer: ~1.5
- vektah/bugfree-dangerzone: ~0.2
This package is not auto-updated.
Last update: 2024-09-24 02:27:52 UTC
README
重要通知
此包是 aztech/events 的主仓库,不包含任何代码。请参考 composer.json 以查看此包提供的包列表。
它 导入所有额外插件 到您的依赖中,强烈建议不要依赖此包,因为它主要用于向后兼容。
稳定性
安装
通过 Composer
Composer 是安装 aztech/events 的唯一支持方式。还不知道 Composer? 了解更多。
$ composer require "aztech/events":"~1"
自动加载
将以下代码添加到您的引导文件中
require_once 'vendor/autoload.php';
概念
aztech/events 的目标是为构建 PHP 中的事件驱动架构提供一个坚实的基础。
现有库中的当前主流方法是在同一进程中生成和消费事件(例如,在单个 HTTP 请求期间)。虽然这在大多数情况下都很好,但它与需要跨进程/主机边界传输事件的分布式系统不太匹配。此库通过使用 事件通道 来解耦发布和订阅过程,试图解决这个问题。
事件通道简单地是任何可以写入数据并在以后检索的资源(例如,可读 TCP 套接字、内存、共享内存、文件、消息队列...)。当发布事件时,它被序列化并写入通道,而不是将它们派发到事件订阅者。
在通道的另一端,消费者负责读取传入的事件(同步或异步,取决于使用的通道类型)并将它们推送到标准事件派发器。消费者使用的派发器负责将接收到的事件派发到您的处理器。
这意味着您可以使用以下方法发布和派发事件
如果您想创建和发布事件,则需要使用 发布者。如果您想消费发布的事件,则需要使用 处理器。处理器负责通过其使用的任何传输接收事件。库提供了可以绑定 订阅者 的钩子,订阅者只是简单的事件处理器。
可选地,库提供了一个应用程序对象,您可以轻松地将订阅者绑定到它。
事件匹配规则
在 events 中,所有事件都是基于主题进行发布和订阅的。事件必须公开一个类别属性,它必须返回事件所属的主题。它可以是一个单词,或者由点分隔的单词链。每个点表示一个子主题。
订阅者可以选择基于精确匹配订阅主题,或使用通配符订阅多个事件。
使用通配符
tl;dr 使用 '#' 匹配任何内容,'*' 匹配一个未知单词。
事件类别匹配实际上遵循 AMQP 主题规范,相当灵活
遗留的amqp-topic-binding过滤器由一个描述的字符串值组成。类型描述的值被解释为模式,用于匹配正在评估的消息的属性部分的主体字段。
该模式由零个或多个标记组成,每个标记由"."字符分隔。标记"#"和"*"具有特殊含义。由单个字符"*"组成的标记匹配主体字段中的一个单词。由单个字符"#"组成的标记匹配主体字段中的零个或多个单词。因此,过滤器值"*.stock.#"将匹配主体"usd.stock"和"eur.stock.db",但不匹配"stock.nasdaq"。
基本上,主题名称必须由字母、数字和破折号组成。可以通过使用点来指定子主题。
topic
topic.subtopic
topic.subtopic.leaf
您可以使用"*"作为通配符来匹配主题中的单个组件。
topic.* will match with topic.subtopic, but not with topic nor topic.subtopic.leaf
还有一个"#",表示0个或多个组件。
# will match all possible topics.
topic.# will match topic, topic.subtopic, and topic.subtopic.leaf and any subtopic of topic no matter its nesting level
topic.#.leaf will match topic.subtopic.leaf and topic.other.leaf and many others, but not topic.subtopic.other
要获取事件匹配的最新真值表,请参阅Aztech\Events\Tests\Unit\CategoryMatchTruthTable
的源代码。
用法
为了简单起见,有工厂可用于创建发布者和调度者。
下面列出了一些提供者的示例。完整的文档可以在这里找到。
基本用法
require_once 'vendor/autoload.php'; use \Aztech\Events\Event; use \Aztech\Events\Bus\Events; use \Aztech\Events\Bus\Plugins\Plugins; Plugins::loadMemoryPlugin(); $publisher = Events::createPublisher('memory'); $processor = Events::createProcessor('memory'); // Subscribe to all events using a wildcard filter $processor->on('#', function (Event $event) { echo 'Received a new event : ' . $event->getCategory(); }); $event = \Aztech\Events\Events::create('category', array('property' => 'value')); $publisher->publish($event);
查看特定提供者的文档以获取更多用法示例。