yoye/redis-broker

PHP Redis消息代理

v3.3.4 2017-12-04 15:37 UTC

This package is not auto-updated.

Last update: 2024-09-22 07:59:40 UTC


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"