redis队列插件消费,消息丢失或第二条消费时间不可控

liuqing

问题描述

使用redis队列插件遇到bug
https://www.workerman.net/plugin/12
同时发送两条消息,设置一个消费进程,会丢消息?

程序代码或配置

process配置
    'redis_consumer_fast'  => [
        'handler' => Webman\RedisQueue\Process\Consumer::class,
        'count' => 2,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis/fast'
        ]
    ],
    'redis_consumer_slow'  => [
        'handler' => Webman\RedisQueue\Process\Consumer::class,
        'count' => 1,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis/slow'
        ]
    ]
消费者
class TestSlow implements Consumer
{
    // 要消费的队列名
    public string $queue = 'test-slow';

    // 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接`
    public string $connection = 'default';

    // 消费
    public function consume($data)
    {
        var_dump("-------------", date("Y-m-d H:i:s"), $data, "-------------");
    }
}

重现问题的步骤

执行 test.php
use Webman\RedisQueue\Redis;

require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../support/bootstrap.php';

$nowtTime = date("Y-m-d H:i:s");
var_dump("start_send=".$nowtTime);
Redis::send("test-slow", ["id" => $nowtTime."-1"]); //丢失
Redis::send("test-slow", ["id" => $nowtTime."-2"]);

控制台打印
string(13) "-------------"
string(19) "2024-01-26 18:21:26"
array(1) {
["id"]=>
string(21) "2024-01-26 18:21:26-2"
}
string(13) "-------------"
id-1的丢失了??

(ps:同时也遇到第一条没丢,但是消费时间很慢的情况...)

求指教..

操作系统环境及workerman/webman等具体版本

操作系统及workerman/webman等框架组件具体版本
Workerman version:4.1.14 PHP version:8.0.30 Event-Loop:\Workerman\Events\Event
mac下的docker环境 krisss/docker-webman:8.0-cli-alpine
自建redis

224 1 0
1个回答

liuqing

md .被自己蠢死! 艹. 另有测试环境在执行队列消费!
灵感来源: https://www.workerman.net/q/10262

  • 暂无评论
🔝