fivesqrd/ordin

本包最新版本(v0.8.1)没有可用的许可证信息。

简单消息队列客户端

v0.8.1 2019-11-27 15:04 UTC

README

Ordin 是一个简单的 PHP 事件发布/订阅队列库,使用 DynamoDB 作为后端。队列实现允许多个观察者接收相同的事件,但每个观察者只会接收到一个事件。

这在分布式微服务环境中非常有用,在这种环境中,事件应该被所有类型的微服务看到,但只由每种微服务类型的一个实例看到。

配置

$config = [
    'namespace' => 'My-App'
    'table' => 'My-Table-Name',
    'aws' => [
        'version' => '2012-08-10',
        'region'  => 'eu-west-1',
        'credentials' => [
            'key'    => 'my-key',
            'secret' => 'my-secret',
        ],
    ],
];

准备 DynamoDb 表

创建一个本地配置文件,例如 config.php

<?php

return [
    'table' => 'My-Table-Name',
    'aws' => [
        'version' => 'latest',
        'region'  => 'eu-west-1',
        'credentials' => [
            'key'    => 'my-key',
            'secret' => 'my-secret',
        ],
    ],
];

运行表创建脚本

php vendor/fivesqrd/ordin/scripts/CreateTable.php config.php

实例化队列

$queue = Ordin\Queue::instance(
    $config, 'My-App-Ecosystem'
);

将事件添加到队列


$event = Ordin\Event::create(
    'order.created', ['to' => 'you@domain.com', 'subject' => 'hello']
);

/* Add event to queue */
$result = $queue->add($event);

从队列中获取所有新事件

/* Receive 5 events */
$events = $queue->receive($observer)->limit(5)->fetch();

foreach ($events as $event) {

    $payload = $event->payload();

    /* Do the work */
    $id = $event->id();
}

按主题获取新事件

/* Receive 5 events */
$events = $queue->receive($observer)->topics(['order.released'])->fetch(5);

foreach ($events as $event) {

    $payload = $event->payload();

    /* Do the work */
    $id = $event->id();
}

为观察者标记事件为未读

/* Receive 5 events */
$events = $queue->receive($observer)->topics(['order.released'])->fetch(5);

foreach ($events as $event) {

    $queue->unread($event, $observer);
}