webman使用队列延时投递的时候不生效外加redis处理失败队列的时候看不到消息情况

shaonian820

composer require webman/redis-queue
开发环境:win上使用docker开发测试

redis版本:
截图

非延时投递成功:
截图
延时投递失败(不处理消息):
截图

处理失败的时候:
截图

3699 4 0
4个回答

walkor

执行composer info看下workerman/redis-queue版本。

如果小于1.0.3 更新下 workerman/redis-queue 命令为 composer require workerman/redis-queue ^1.0.3

然后重启webman试下。

  • 暂无评论
shaonian820

截图

查看了 workerman的workerman/redis-queue 是 1.0.3版本,
这个问题依旧存在
截图
webman 和php版本
截图

  • 暂无评论
walkor

更新到 workerman/redis-queue 到1.0.4 试下
命令 composer require workerman/redis-queue ^1.0.4

  • shaonian820 2021-01-06

    好的 感谢 更新以后可以看到失败队列的消息了,但是还有一个问题就是队列延时投递不生效是为什么呢?

shaonian820


而且在生产环境linux使用队列的途中,redis会断开连接 然后提示连接超时

错误信息如下:
Fatal error: Uncaught RuntimeException: Workerman Redis Wait Timeout (10 seconds) in /data/www/tak-main/vendor/workerman/redis-queue/src/Client.php:169
Stack trace:
#0 /data/www/tak-main/vendor/workerman/redis/src/Client.php(303): Workerman\RedisQueue\Client->Workerman\RedisQueue\{closure}(false, Object(Workerman\Redis\Client)) #1 /data/www/tak-main/vendor/workerman/workerman/Events/Select.php(232): Workerman\Redis\Client->Workerman\Redis{closure}()
#2 /data/www/tak-main/vendor/workerman/workerman/Events/Select.php(281): Workerman\Events\Select->tick() #3 /data/www/tak-main/vendor/workerman/workerman/Worker.php(2430): Workerman\Events\Select->loop()
#4 /data/www/tak-main/vendor/workerman/workerman/Worker.php(1555): Workerman\Worker->run() #5 /data/www/tak-main/vendor/workerman/workerman/Worker.php(1385): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))
#6 /data/www/tak-main/vendor/workerman/workerman/Worker.php(1359): Workerman\Worker::forkWorkersForLinux() #7 /data/www/tak-main/vendor/workerman/workerma in /data/www/tak-main/vendor/workerman/redis-queue/src/Client.php on line 169
Worker[28422] process terminated with ERROR: E_ERROR "Uncaught RuntimeException: Workerman Redis Wait Timeout (10 seconds) in /data/www/tak-main/vendor/workerman/redis-queue/src/Client.php:169

  • walkor 2021-01-06

    是压测么?看起来是redis承受不住压力,导致入队列超时。

  • shaonian820 2021-01-06

    可能机器原因 我在测试服务器会这样 然后生产服务器用的是阿里云的redis,暂时没出现这个问题

  • walkor 2021-01-29

    workerman/redis是个异步客户端,本地会有个队列将(get/set等)命令暂存发给redis服务端。 Workerman Redis Wait Timeout (10 seconds) 意思是队列里有命令超过10秒还没成功发送给redis服务端,触发超时。出现这个问题一般是业务有长时间阻塞的代码如sleep、curl等,或者redis读写量太大超过redis服务端承受能力。

年代过于久远,无法发表回答
🔝