aztech/events

此包的最新版本(v1.1.0)没有可用的许可信息。

支持AMQP、WAMP、Stomp、Redis、PDO等的PHP事件库

v1.1.0 2014-09-09 13:07 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:27:52 UTC


README

重要通知

此包是 aztech/events 的主仓库,不包含任何代码。请参考 composer.json 以查看此包提供的包列表。

导入所有额外插件 到您的依赖中,强烈建议不要依赖此包,因为它主要用于向后兼容。

稳定性

Latest Stable Version Latest Unstable Version

安装

通过 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);

查看特定提供者的文档以获取更多用法示例。