一、事实
在工程上,“绝对不丢消息”是不存在的,只能定义:
丢不丢
丢多少
丢了怎么办
谁负责兜底
这是所有 MQ、SNMP Trap、日志系统的共同现实。
二、消息为什么会丢?(源头分析)
无论你用的是System V MQ / POSIX MQ / socket / SNMP Trap,丢消息只可能来自下面 5 类原因:
1️⃣ 队列满了(最常见)
发送快
消费慢
内核直接拒绝
表现:
msgsnd()返回EAGAINmq_send()返回EAGAIN
2️⃣ 进程崩溃
发送方 crash(异常崩溃) → 消息没发出去
接收方 crash → 消息留在队列或无人消费
3️⃣ 内存 / 内核限制
- <