编号:B-08 严重级:medium 工作线:broker(internal/broker) 来源:审查 P-15 依赖:无 被依赖:L-03 (#22)
queuesMu
pending++
pending--
pending==0
Broker.Shutdown(ctx)
OnConnect
PublishDown
server.Clients.GetAll()
ErrServerShuttingDown
server.Close()
internal/broker/broker.go、queue.go。
internal/broker/broker.go
queue.go
Shutdown
len(queues)==0
以下是本次复审各区审查报告的原文段落。A、M、I、P、S 开头的是原始发现编号(A 管理后台与网页、M 消息核心、I 身份认证群在线、P 传输平台部署、S SDK)。解决方案以本 issue 上方的"结论与统一方案"为准;原文里的方案与之不一致时,按上方执行。
broker.go:482-491
queue.go:16-45
pending
len(b.queues)==0
复审基线:main 4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。
4059a15
已合入 origin/main 0c9b459。落地提交 91e887b fix: 完成 broker 复审 B-03 至 B-12 (#15)。L-03 停机顺序见 b40ef5c。
0c9b459
91e887b
b40ef5c
No dependencies set.
The note is not visible to the blocked user.
编号:B-08 严重级:medium 工作线:broker(internal/broker) 来源:审查 P-15
依赖:无 被依赖:L-03 (#22)
结论与统一方案
queuesMu内取出或新建队列并pending++,之后再发送;worker 处理完一项pending--;worker 空闲超过 60 秒时加锁检查,pending==0就把自己从 map 删除并退出。发送方拿到队列时已加过计数,worker 不会在它发送之前退出;退出后再来的消息会新建队列。Broker.Shutdown(ctx)(审查 P-06 的 broker 部分,P-06 原文附在 L-03):OnConnect直接拒绝新连接,PublishDown返回已关闭;server.Clients.GetAll()(跳过内联客户端),用ErrServerShuttingDown(0x8B)断开;server.Close(),受 ctx 限时;改动文件
internal/broker/broker.go、queue.go。与其他问题的交互 / 冲突说明
Shutdown。验收与测试
len(queues)==0,goroutine 数回落。问题明细(各区审查原文,证据含文件与行号)
[P-15] uplinkQueue 按端编号创建后永不回收
broker.go:482-491;queue.go:16-45。pending计数。入队时在queuesMu锁内取出或新建队列并pending++,之后再发送;worker 处理完一项就pending--。pending==0就把自己从 map 里删掉并退出。发送方拿到队列时已经加过计数,worker 不会在它发送之前退出;退出后再来的消息会新建队列。internal/broker/broker.go、queue.golen(b.queues)==0,goroutine 数回落;入队和回收并发的压力测试。复审基线:main
4059a15(2026-09-30)。编号说明、各工作线的合并顺序、共享文件归属见总览 #7。已合入 origin/main
0c9b459。落地提交91e887bfix: 完成 broker 复审 B-03 至 B-12 (#15)。L-03 停机顺序见b40ef5c。