消息处理流程不稳定,机器人就不可靠——消息丢了、处理错了、回复慢了,用户体验全崩。稳定的处理流程不是"收到就处理",是设计成状态机——接收态、处理态、完成态,每态有校验、重试、补偿。本文讲稳定处理流程的状态机设计。
一、接收态——校验去重再进处理
接收态是消息进来的第一关。接收态的工程要点是签名校验、幂等去重、格式校验。签名校验——确认消息来自微信不是伪造。幂等去重——按消息ID去重,重复消息不重复处理。格式校验——消息字段是否完整,不完整的拒绝处理。
接收态的工程实现是校验链。校验链按顺序执行——签名校验→幂等去重→格式校验,每步失败直接返回不进处理。校验链的价值是入口把关——脏消息不进处理流程,避免下游出错。消息接收和签名校验的接口在 Eyun 开发文档 中有对应支撑。
二、处理态——重试加超时防卡死
处理态是消息处理的核心。处理态的工程要点是超时控制、重试策略、状态记录。超时控制——处理设超时,卡死的强制结束。重试策略——处理失败重试,最多3次指数退避。状态记录——处理状态落库,方便排查和恢复。
处理态的工程实现是处理引擎加状态机。处理引擎——执行处理逻辑,带超时和重试。状态机——处理状态流转(pending→processing→success/failed)。处理态的坑是无限重试——重试不设上限会打爆接口,最多3次。消息处理和状态管理的接口在 Eyun 开发文档 中有对应能力。
三、完成态——确认加补偿保一致
完成态是处理完的收尾。完成态的工程要点是结果确认和补偿事务。结果确认——处理成功发确认,失败的进死信队列。补偿事务——处理涉及多步操作,某步失败要回滚已完成的步骤,保证一致性。
完成态的工程实现是确认机制加补偿队列。确认机制——处理成功发ACK,消息从队列移除。补偿队列——处理失败的进补偿队列,定期重试或人工处理。完成态的坑是数据不一致——多步操作部分成功部分失败,要补偿回滚。消息处理确认和补偿的接口在 Eyun 开发文档 中有接口能力。
稳定处理流程对照
状态 | 核心动作 | 工程要点 | 失败处理 |
|---|---|---|---|
接收态 | 校验+去重 | 签名+幂等+格式 | 拒绝处理 |
处理态 | 执行+重试 | 超时+重试+状态 | 重试3次后进死信 |
完成态 | 确认+补偿 | ACK+补偿事务 | 回滚+人工介入 |
稳定消息处理流程实现
class StableMessageProcessor: def __init__(self): self.state_store = StateStore() # 状态存储 self.dead_letter = DeadLetterQueue() def process(self, raw): # 接收态:校验去重 if not self.verify_signature(raw): return "invalid" if self.state_store.exists(raw.msg_id): return "duplicate" # 幂等去重 self.state_store.save(raw, "pending") try: # 处理态:超时+重试 for attempt in range(3): try: self.state_store.update(raw.msg_id, "processing") result = self.business_process(raw) self.state_store.update(raw.msg_id, "success") return result except TimeoutError: if attempt < 2: time.sleep(2 ** attempt) # 指数退避 continue except Exception as e: self.state_store.update(raw.msg_id, "failed") self.dead_letter.add(raw, str(e)) raise except Exception: # 完成态:补偿事务 self.compensate(raw) return "处理失败" def compensate(self, raw): # 补偿:回滚已完成的步骤 steps = self.state_store.get_steps(raw.msg_id) for step in reversed(steps): if step.status == "success": step.rollback() # 反向操作回滚 def business_process(self, raw): # 业务处理:按消息类型 handler = self.get_handler(raw.type) return handler.handle(raw)落地建议
处理流程设计成状态机——接收态校验去重、处理态重试超时、完成态确认补偿。接收态是入口把关——脏消息不进处理,避免下游出错。处理态要超时重试——卡死的强制结束,失败重试最多3次。完成态要补偿——多步操作部分失败要回滚,保证数据一致。微信侧的消息接收和发送由Eyun这类个人微信API平台 提供,状态机和补偿逻辑在自建服务实现,接口字段以平台开发文档为准。