laravel - 无法发布,因为 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),
],
解决方案
您可以使用此代码创建另一个 redis 实例并在 Laravel 中发布消息
$redis = Redis::connection('my-connection');
$redis->publish('example-channel', $data);
推荐阅读
- c# - nHibernate 因 whereNot 限制而失败,但因 where 限制而失败
- swift - 受泛型类约束的 Swift 泛型函数
- c++ - 如何打印嵌套 std::unordered_map 的内容?
- python - 来自两个列表的python常用值列表
- botframework - 在 Bot 框架模拟器上测试 LUIS bot 的问题
- swift5 - Xcode 11 Swift 5 在非主线程中更新标签
- symfony - lexik JWT 在解码令牌时出错无效令牌
- javascript - Foreach 循环未完成
- javascript - 如何将功能组件手动渲染到编程?
- java - 从不同的双数计算