使用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 version:4.1.14 PHP version:8.0.30 Event-Loop:\Workerman\Events\Event
mac下的docker环境 krisss/docker-webman:8.0-cli-alpine
自建redis
md .被自己蠢死! 艹. 另有测试环境在执行队列消费!
灵感来源: https://www.workerman.net/q/10262