【问题标题】:Can't publish because predis is in subscriber mode (Laravel)无法发布,因为 predis 处于订阅者模式(Laravel)
【发布时间】:2019-11-03 03:17:01
【问题描述】:

我在 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'如下所示:

'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),
],

【问题讨论】:

    标签: laravel redis predis


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      相关资源
      最近更新 更多