You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lumen 8.0使用DigitalOcean外部Redis作队列连接时报读取错误如何解决

问题原因

你遇到的报错核心是DigitalOcean 托管 Redis 服务默认仅接受 TLS 加密连接,你当前的配置虽然在.env里声明了REDIS_SCHEME=tls,但Lumen的默认配置没有读取该参数,还是用tcp协议发起连接,被服务端主动断开后就抛出「Error while reading line from the server」错误。

解决步骤
    1. 补全config/database.php的Redis连接配置
      Lumen默认的database.php配置中没有引入scheme参数,需要手动添加读取.env的配置项,同时加TLS校验相关的上下文配置:
// config/database.php
'redis' => [
    'client' => env('REDIS_CLIENT', 'predis'),
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
        // 新增以下两项配置
        'scheme' => env('REDIS_SCHEME', 'tcp'),
        'context' => [
            'stream' => [
                'verify_peer' => true,
                'verify_peer_name' => true,
            ],
        ],
    ],
],
    1. 调整config/queue.php的Redis队列配置
      不要将read_write_timeout设为-1,DigitalOcean 托管Redis的默认空闲连接超时时间为300秒,设置负数会导致连接被服务端断开后客户端无法感知重连:
// config/queue.php
'redis' => [
   'driver' => 'redis',
   'connection' => env('QUEUE_REDIS_CONNECTION', 'default'),
   'queue' => 'default',
   'retry_after' => 90,
   'block_for' => null,
   'read_write_timeout' => 60, // 修改为小于300的数值即可
],
    1. 确认Lumen已加载Redis配置和服务
      打开bootstrap/app.php,确保已经手动加载database配置、注册Redis服务提供者(Lumen默认不会自动注册这两项):
// 加载database配置文件
$app->configure('database');
// 注册Redis服务提供者
$app->register(Illuminate\Redis\RedisServiceProvider::class);
    1. 验证网络权限
      登录DigitalOcean控制台,进入你所用的Redis实例的「设置」页面,确认部署Lumen服务的服务器公网IP已经被添加到Redis的IP白名单中,未加白的IP会被服务端主动拒绝连接。
    1. 生效配置并测试
      清理配置缓存后启动队列测试:
php artisan config:clear
php artisan queue:work redis --tries=3

内容的提问来源于stack exchange,提问作者Shakil Anwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:39:03