把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程

把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程

做无人值守内容矩阵时,我遇到一个非常隐蔽的坑:Agent 定时推送 IM 消息,日志里 rc=0 全是绿灯,可实际一条都没送达,服务端静默吞掉了。这篇文章记录完整排查过程,给同样跑自动化推送的人一个参考。

现象

某天早上看后台,日志一片绿:

ini 复制代码
2026-10-18 03:12:44 [INFO] push msg #1201 -> rc=0
2026-10-18 03:12:44 [INFO] push msg #1202 -> rc=0
2026-10-18 03:12:44 [INFO] push msg #1203 -> rc=0

rc=0 通常代表成功,但客户反馈一条都没收到。这是典型的「假成功」。

排查路径

1. 先排除网络层

检查了出网、连接池、重试次数,全部正常,排除网络抖动。

2. 对比「发送数」与「送达数」

这是关键一步。我把推送任务里记录的 sent_count 和 IM 服务端回执里的 delivered_count 拉出来对比:

python 复制代码
# 伪代码示意
for task in tasks:
    sent = task.sent_count          # 我这边记的
    delivered = task.delivered_count  # 服务端回执
    if sent != delivered:
        logger.warning(f"task={task.id} sent={sent} delivered={delivered}")

一跑,发现 sent=3 delivered=0,问题锁定在服务端丢弃,而非网络。

3. 定位到「长消息被吞」

逐条对比后发现,被吞的全是超长消息(单条几万字)。IM 服务端对单条消息有长度上限,超限的直接静默丢弃,不返回错误码。

验证:把一条超长消息拆成 10 条短消息,全部送达。

解决方案

按长度拆包发送

python 复制代码
MAX_LEN = 4000  # 服务端单条上限,按你对接的 IM 调整

def chunk_text(text: str, limit: int = MAX_LEN):
    return [text[i:i+limit] for i in range(0, len(text), limit)]

for chunk in chunk_text(long_text):
    push(chunk)

加「看门狗」对账

发完不是结束,起一个对账任务核对发送数与送达数,对不上就告警:

python 复制代码
def watchdog():
    for task in tasks:
        if task.sent_count != task.delivered_count:
            alert(f"静默丢失: task={task.id}")

教训

  • rc=0 只代表「发出去了」,不代表「送达了」。自动化推送必须核对底层回执。
  • 长消息是静默丢弃的高发区,务必按长度拆包。
  • 无人值守系统里,「静默」比「报错」更可怕------报错能触发告警,静默只能靠对账兜底。

这套「拆包 + 对账看门狗」已经跑进我的矩阵,从「半夜静默」变成「半夜被吵醒但至少知道」。希望对你有用。

相关推荐
鸽鸽程序猿1 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者1 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python
season_zhu1 小时前
Skills For Real Engineers 系列之一:先配好项目,再让 ask-matt 帮我选技能
ios·openai·ai编程
MasonYyp1 小时前
asyncio并发协程
python
Rain的Java大神实战圈1 小时前
别再死磕 MySQL 了:向量数据库与 RAG 生产落地实录(Java 工程师专场)
ai编程
小小张说故事2 小时前
Python 的整数为什么永远不会溢出?拆开大整数对象,看 30 位一节的存储与运算代价
python
ZzT2 小时前
拆解 Anthropic 开源的电商 Agent:哪些规则写进代码,哪些留给模型
ai编程·claude
用户298698530142 小时前
Python 实现 Word 与 TIFF 双向转换的方案
后端·python·api
benchmark_cc2 小时前
实时行情和分钟 K 线应该如何配合使用?从信号计算到交易决策的完整分析
大数据·python·数据分析·pandas·量化交易·股票数据·quantdash