我有服务器A,服务器B,使用webman最新版,使用webman/redis-queue队列,服务器B会发送队列queue_request到服务器A,处理完成后,发送队列queue_response等待服务器B接收。
"php": ">=7.2",
"workerman/webman-framework": "^1.5.0",
"monolog/monolog": "^2.0",
"tinywan/exception-handler": "^1.1",
"webman/think-orm": "^1.0",
"psr/container": "^2.0",
"illuminate/redis": "^10.5",
"symfony/cache": "^6.2",
"webman/console": "^1.2",
"topthink/think-log": "^2.0",
"workerman/crontab": "^1.0",
"zjkal/time-helper": "^1.1",
"tinywan/validate": "^0.0.6",
"ext-openssl": "*",
"yzh52521/webman-lock": "^1.0",
"ext-pdo": "*",
"yzh52521/webman-throttle": "^1.0",
"google/apiclient": "^2.13",
"symfony/translation": "^6.2",
"webman/redis-queue": "^1.2",
"vlucas/phpdotenv": "^5.5",
"webman/log": "^1.1",
服务器能正常运行一段时间,有时候几小时,有时候一两天,然后就会发生错误,stdout.log打印错误如下。这个错误目前只会影响出现异常的队列,其他进程里面连接到服务器B使用support\Redis是不受影响的。
Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)
Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)
Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)
Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)
Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)
下图是我的status信息,27388正常的时候,connections是有4个连接的。
发现报错的队列,然后跟综进程 strace -ttp 27388
对比下面这个是正常连接队列的情况 strace -ttp 27389
27388队列正常是要执行BRPOP取出数据,但是却出现了循环报错“NOAUTH Authentication required”,导致了连接失败,从而报了“Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)”这个错误,理论上应该是这样的。
这个队列,我开了两个进程,另外一个进程是可以正常连接,为何其中一个进程过一段时间就出错,并且报需要认证,难道因为配置文件丢失,如果丢失的话,那另外一个进程同样也会异常。
希望有大神能解我茅塞。
可能是消费太耗时了,影响了redis异步连接。
消费消息时需要投递新消息到队列里的时候用用同步投递的方法 Resdis::send()
老大,我确定用的是同步,不是异步队列。
我查了下“NOAUTH Authentication required”相关的资料如下图:
在没有使用密码连接情况下,直接连接使用命令,就会报“NOAUTH Authentication required”。
当他报“Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)”这个错误的时候,他不应该重新连接吗?但是从下面这个图里面,他根本没有尝试去连接,而是直接快速的尝试使用BRPOP这个命令。
下面是队列配置文件,config/plugin/webman/redis-queue/redis.php,如果说报”NOAUTH Authentication required“,会不会跟我的配置文件里面使用了env()有关系。
一直报 NOAUTH Authentication required ,那就是密码不对
错误每隔5秒报错“Workerman Redis Connection to redis://192.168.2.18:7550 timeout (5 seconds)”,说明有在重试,但是实际上并没有进行重试的操作,而只是一直在尝试BRPOP出数据。
报错的连接和BRPOP的应该不是同一个连接,并且你的strace时间也没有达到5秒。我这没有你的现场环境,你自在源码里定位下吧。
你解决了吗,我也遇到了
现在偶尔会出现,具体原因还没搞明白。
我也是偶现的,是测试服,启动半天就可以会
我也出现了 重启就正常了 我也是用env方法
升级下 workerman/redis
记得restart 重启
已经更新,继续观察下
已经更新,希望能永久性地解决这个问题,一直以来都偶尔会有这种情况。