yii2-redis icon indicating copy to clipboard operation
yii2-redis copied to clipboard

How to receive messages from Pub/Sub Subscription

Open raultruco opened this issue 7 years ago • 3 comments

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'
);
  1. 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!

raultruco avatar Dec 19 '17 08:12 raultruco

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.

cebe avatar Dec 30 '17 12:12 cebe

@samdark Is this feature planed in 3.0?

razonyang avatar Apr 24 '19 07:04 razonyang

We haven't thought about Redis yet.

samdark avatar Apr 24 '19 10:04 samdark