fivesqrd / ordin
本包最新版本(v0.8.1)没有可用的许可证信息。
简单消息队列客户端
v0.8.1
2019-11-27 15:04 UTC
Requires
- fivesqrd/bego: ~0.17.2
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);
}