redis 订阅报 Error while reading line from the server [tcp://120.**.**:6379]
1. 运行环境
Welcome to Alibaba Cloud Elastic Compute Service
1). 当前使用的 Laravel 版本?
Laravel Framework 8.83.27
2). 当前使用的 php/php-fpm 版本?
PHP 版本:
PHP 7.4.28 (cli)
php-fpm 版本:
3). 当前系统
CentOS Linux release 8.2.2004 (Core)
4). 业务环境
开发环境
5). 相关软件版本
redis_version:6.0.9
2. 问题描述?
执行订阅 操作 报 Error while reading line from the server. [tcp://120...**:6379]
代码如下
配置
config/database.php
redis host passord 在 .env 文件已配置
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '120.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => env('REDIS_RW_TIMEOUT', 30), // 读写超时设定
]
]
routes\web.php
Route::get('/publish/{msg}', function ($msg) {
\Illuminate\Support\Facades\Redis::publish('test-channel',$msg); // 发布消息
return json_encode(['msg'=>$msg]);
});
Route::get('/subscribe', function () {
\Illuminate\Support\Facades\Redis::subscribe(['test-channel'], function ($message) { // 订阅消息
echo $message;
});
});
发布OK
订阅失败
3. 您期望得到的结果?
期望订阅成功
4. 您实际得到的结果?
Predis\Connection\ConnectionException: Error while reading line from the server. [tcp://120.**.**.**:6379] in file /www/dana/php/blog/vendor/predis/predis/src/Connection/AbstractConnection.php on line 131
#0 /www/dana/php/blog/vendor/predis/predis/src/Connection/StreamConnection.php(286): Predis\Connection\AbstractConnection->onConnectionError()
#1 /www/dana/php/blog/vendor/predis/predis/src/PubSub/Consumer.php(116): Predis\Connection\StreamConnection->read()
#2 /www/dana/php/blog/vendor/predis/predis/src/PubSub/AbstractConsumer.php(171): Predis\PubSub\Consumer->getValue()
#3 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php(45): Predis\PubSub\AbstractConsumer->current()
#4 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(90): Illuminate\Redis\Connections\PredisConnection->createSubscription()
#5 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(277): Illuminate\Redis\Connections\Connection->subscribe()
#6 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Redis\RedisManager->__call()
#7 /www/dana/php/blog/routes/web.php(46): Illuminate\Support\Facades\Facade::__callStatic()
#8 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Illuminate\Routing\RouteFileRegistrar->{closure}()
#9 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Route.php(208): Illuminate\Routing\Route->runCallable()
#10 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#11 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#12 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#13 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#14 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#16 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#18 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
#20 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle()
#21 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#23 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#24 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle()
#25 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#26 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then()
#27 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack()
#28 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute()
#29 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute()
#30 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch()
#31 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#32 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#33 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#34 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#35 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#36 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#37 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#38 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#39 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#40 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#41 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#42 /www/dana/php/blog/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#43 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle()
#44 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#45 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Http\Middleware\TrustProxies->handle()
#46 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#47 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then()
#48 /www/dana/php/blog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#49 /www/dana/php/blog/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle()
#50 {main}
你这个测试方法不对,
subscribe
操作是一个阻塞操作,放到路由里测试的话,相当于让http
请求一直处于等待的状态,超过默认连接时长或http
请求时长的话,就会报错了。当然,如果你请求完以后,在超时之前往
channel
里publish
一条消息,这样也能正常打印,正常响应。你这个应该放到
cli
模式下作测试,这样就不会有超时一说了。已经亲测,放心使用。