fix(queue): 修复队列 expire 配置为 0 导致任务执行期间被幽灵重复消费的严重缺陷 (TDD)
这个提交包含在:
@@ -16,6 +16,7 @@ class StabilityFixTest
|
||||
self::testNotifyTimeParsing();
|
||||
self::testAreaTreeAssembly();
|
||||
self::testUserAddressDefenseLogic();
|
||||
self::testQueueConfigSafety();
|
||||
|
||||
echo "====================================================\n";
|
||||
echo "【测试结论】所有稳定性测试均已通过!\n";
|
||||
@@ -127,6 +128,26 @@ class StabilityFixTest
|
||||
|
||||
echo "[PASS] 测试 3 通过: 用户收货地址防 IDOR 越权及空指针防御逻辑有效\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试 4: 队列配置安全基线测试(杜绝 expire=0 导致的幽灵重复消费)
|
||||
*/
|
||||
public static function testQueueConfigSafety()
|
||||
{
|
||||
$queueConfigFile = dirname(__DIR__) . '/application/extra/queue.php';
|
||||
assert(file_exists($queueConfigFile), "queue.php 配置文件不存在");
|
||||
|
||||
$queueConfig = include $queueConfigFile;
|
||||
assert(is_array($queueConfig), "queue.php 返回格式错误");
|
||||
|
||||
// 当 expire 为 0 时,think-queue 会在每个 tick 把正在执行的任务立即判定为已过期并重新投递,造成并发重复消费
|
||||
assert(
|
||||
$queueConfig['expire'] === null || $queueConfig['expire'] >= 120,
|
||||
"queue.php 的 expire 配置必须大于等于 120 秒或为 null,当前配置为 {$queueConfig['expire']},存在并发重复消费隐患"
|
||||
);
|
||||
|
||||
echo "[PASS] 测试 4 通过: 队列超时与任务租期配置安全合规\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (php_sapi_name() === 'cli' && basename(__FILE__) === basename($_SERVER['SCRIPT_FILENAME'] ?? '')) {
|
||||
|
||||
在新工单中引用
屏蔽一个用户