无法发布,因为 predis 处于订阅者模式 (Laravel)

Can't publish because predis is in subscriber mode (Laravel)

我在 Laravel 5.7 中有一个名为 RedisSubscribe.php 的命令 class。 我希望能够订阅 'message-channel',对消息做一些事情,然后使用 redis 将消息发布到 'test-channel'。 一切都很好,直到我必须发布到测试频道。 Redis当然只能订阅或发布,不能两者都做,结果我得到这个错误信息:"ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context".

所以我知道 node.js 您可以通过使用以下代码创建两个单独的 ioredis 实例来轻松做到这一点

var Redis = require('ioredis');
var subscriber = new Redis();
var publisher = new Redis();

如何在 PHP 中做同样的事情?

我的代码目前看起来像这样

public function handle()
    {
        Redis::subscribe(['message-channel'], function ($message){
            Redis::connection('my-connection');
            Redis::publish('test-channel', $message);
        });
    }
}

显然,我没有正确使用 Redis::connection,因为我仍然收到相同的错误消息。

'my-connection' 在数据库文件中看起来像这样:

'my-connection' => [
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', 6379),
    'database' => env('REDIS_DB', 0),
],

您可以使用此代码

创建另一个redis实例并在Laravel中发布消息
$redis = Redis::connection('my-connection');
$redis->publish('example-channel', $data);