centos7.9,最新webman,按文档使用队列,内容如下,即时队列可以正常消费,延时队列不能正常消费。
正常的流程应该是当{redis-queue}-delayed里面的队列时间到指定的延长时间,就会将里面的数据转移到{redis-queue}-waiting里面,现在我的情况是{redis-queue}-waiting里面的均能正常消费,但是{redis-queue}-delayed的数据一直不处理。 plugin.webman.redis-queue.consumer这个进程是存在的,要不然也不会只消费即时队列的数据。
琢磨了一下午。有大神能指点一下吗?
队列投递
<?php
namespace app\rsapi\v2\controller;
use support\Request;
use Webman\RedisQueue\Redis;
class TestController
{
public function index(Request $request)
{
// 队列名
$queue = 'timeout_order_queue';
// 数据,可以直接传数组,无需序列化
$data = ['to' => 'tom@gmail.com', 'content' => 'hello'];
// 投递消息
Redis::send($queue, $data);
// 投递延迟消息,消息会在60秒后处理
Redis::send($queue, $data, 5);
return response('redis queue test');
}
}
队列消费
<?php
namespace app\queue\redis;
use Webman\RedisQueue\Consumer;
class TimeoutOrderQueue implements Consumer
{
// 要消费的队列名
public $queue = 'timeout_order_queue';
// 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接`
public $connection = 'default';
// 消费
public function consume($data)
{
// 无需反序列化
var_export($data);
}
}
redis-server版本是?
redis-server=6.2.4。
我发现了问题的所在,我有二个消费。
其中A消费的$connection='default',为本地redis连接。
其中B消费的$connection='master',为远程redis连接。
master连接是没有问题的,可以正常连接,因为我使用Redis::connection('master')->send($queue, $data);推送到远程redis,是可以查看到Zset的数据的。
当我B消费的$connection='master'时,延时队列,将不能正常消费,即时消费的没问题。当我将master改为default时,延时消费和即时消费均可正常使用。
正常按道理,如果我的A消费连接的是default,跟B消费应该是不关联的。即使是连接质量问题导致连接失败,那也是B消费不能正常消费延时队列,为什么会导致我的A消费不能延时消费。
没有人反馈过类似问题,可能你哪里搞错了
我多搞几个环境再测试一下。然后再跟你反馈。
我也遇到了。。。队列不会被消费了,redis里有这个{redis-queue}-waitingcommitOrder
请问解决了吗,之前一直正常,最近发现有一个队列只要设置了delay就不执行
解决了,不明所以,使用命令行生成的,就没有问题。
php webman redis-queue:consumer TimeoutOrder
两台服务器时间不一致的时候也会出现相应问题,之前遇到过类似的
感谢提醒,使用命令行生成后正常,之前总出现莫名其妙的问题。
我通过命令生成后还是不消费
不要使用windows,有很多莫名其妙的问题。
我也遇见了相同的问题
本地开发环境
win11
有多个队列,order
队列使用的数据库是8
,本地开发延迟队列和即时队列都可正常执行。但是在部署到
linux
环境的时候,发现即时队列可以正常运行延迟队列没有跑,不知道什么问题,redis库也能看到{redis-queue}-delayed
zset数据后续调整redis数据库为
6
就可以了,试了4和5都不行,没找到具体为啥,就先这样了...redis-server版本是 6.0.8