yoye / redis-broker
PHP Redis消息代理
v3.3.4
2017-12-04 15:37 UTC
Requires
- predis/predis: ~0.8|~1.0
- ramsey/uuid: ~2.7
- symfony/event-dispatcher: ~2.3|~3.0
Requires (Dev)
- m6web/redis-mock: ~2.0
- phpunit/phpunit: ~4.2
README
PHP Redis消息代理
安装
推荐通过Composer安装redis-broker
composer require "yoye/redis-broker" "dev-master"
使用方法
<?php // broker.php require_once __DIR__ . '/../vendor/autoload.php'; use Symfony\Component\EventDispatcher\EventDispatcher; use Yoye\Broker\Adapter\PhpRedisAdapter; use Yoye\Broker\Broker; use Yoye\Broker\Event\BrokerEvents; use Yoye\Broker\Event\MessageEvent; $client = new Redis(); $client->connect('127.0.0.1', 6379, 0); $adapter = new PhpRedisAdapter($client); $dispatcher = new EventDispatcher(); $dispatcher->addListener(BrokerEvents::MESSAGE_RECEIVED, function(MessageEvent $event) { $channel = $event->getChannel(); $message = $event->getMessage(); var_dump($channel, $message); // The event must be marked has done // otherwise the listener will be called indefinitely $event->setDone(); }); $broker = new Broker($adapter, ['foo.channel', 'bar.channel'], $dispatcher); $broker->run();
现在在控制台输入
php broker.php
在另一个控制台输入redis-cli LPUSH foo.channel 'This is a message'
或redis-cli LPUSH bar.channel 'This is a message'
,在第一个控制台你应该看到
string(11) "foo.channel"
string(17) "This is a message"
你还可以设置重复限制,如果达到这个限制,将启动新的事件。
$client = new Redis(); $client->connect('127.0.0.1', 6379, 0); $adapter = new PhpRedisAdapter($client); $dispatcher = new EventDispatcher(); $dispatcher->addListener(BrokerEvents::MESSAGE_RECEIVED, function(MessageEvent $event) { var_dump($event->getMessage()); if ($event->getMessage() === 'FooBar') { $event->setDone(); } }); $dispatcher->addListener(BrokerEvents::NESTING_LIMIT, function(MessageEvent $event) { var_dump('Last call for: ' . $event->getMessage()); }); $broker = new Broker($adapter, ['foo.channel', 'bar.channel'], $dispatcher); $broker->setNestingLimit(3); $broker->run();
现在如果你输入LPUSH foo.channel 'This is a message' 'FooBar'
,你应该看到
string(17) "This is a message"
string(6) "FooBar"
string(17) "This is a message"
string(17) "This is a message"
string(32) "Last call for: This is a message"