首页 > 解决方案 > 无法发布,因为 predis 处于订阅者模式(Laravel)

问题描述

我在 Laravel 5.7 中有一个名为 RedisSubscribe.php 的命令类。我希望能够订阅“消息通道”,对消息进行一些处理,然后使用 redis 将消息发布到“测试通道”。一切都很好,直到我必须发布到测试频道。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' => [
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', 6379),
    'database' => env('REDIS_DB', 0),
],

标签: laravelredispredis

解决方案


您可以使用此代码创建另一个 redis 实例并在 Laravel 中发布消息

$redis = Redis::connection('my-connection');
$redis->publish('example-channel', $data);

推荐阅读