yiisoft / yii2-redis

Yii 2 Redis extension.
http://www.yiiframework.com
BSD 3-Clause "New" or "Revised" License
451 stars 184 forks source link

How to receive messages from Pub/Sub Subscription #131

Open raultruco opened 6 years ago

raultruco commented 6 years ago

Hello, I'm not sure if this feature is implemented in Yii2-redis extension.... but I wanted to work with Pub/Sub using this extension, specifically receive messages of a subscribed key in Redis. Publish part is working fine instead.

I have tried several ways to receive the messages from other publishers:

1) Passing as the latest parameter an array formed by [, ] or a string with the function name. This is how native PHP redis driver works. But I get an error saying: 'mb_strlen() expects parameter 1 to be string, object given'

$subscriptionResponse = Yii::$app->redisSubscriber->subscribe(
    'sync',
    [$this, '_handleSyncInMessage']
);

or

$subscriptionResponse = Yii::$app->redisSubscriber->subscribe(
    'sync',
    '_handleSyncInMessage'
);

2) Putting the callback function inline doesn't work neither. The same error: 'mb_strlen() expects parameter 1 to be string, object given'

$subscriptionResponse = Yii::$app->redisSubscriber->subscribe(
    'sync',
    function($redis, $channel, $message) {
      echo 'Never arrived here..."
    }
);

The following code doesn't throw any error, but I don't know how to receive the messages when other processes publish in the key 'sync':

Yii::$app->redisSubscriber->subscribe('sync');

Anyone has a working example of this?

I also put this question in yiiframework forums here

Thank you!

cebe commented 6 years ago

The redis connection is currently developed to work with commands that do return values and end then. the subscribe command will receive data and never stop until it unsubscribes, so this is currently not supported.

razonyang commented 5 years ago

@samdark Is this feature planed in 3.0?

samdark commented 5 years ago

We haven't thought about Redis yet.