个人微信消息回调怎么实现?Webhook接收与业务处理教程 回调地址配好、消息能收到只是第一步。真正决定能不能上生产的是收到之后怎么处理——事件怎么分发、重复怎么挡、处理失败了怎么补。这篇讲接收之后的处理模式。一、收完先分层接入层不碰业务回调进来只做三件事验签、去重、入队然后立刻返回。业务处理全部放到队列后面。这一层不碰业务是关键。一旦在回调里查库、调模型几秒内返回不了平台判定失败重推用户就收到重复回复。二、事件分发路由表加处理器注册事件类型一多用大 if 会失控。改成路由表——类型到处理器的映射新类型只注册一个处理器不动已有代码事件类型清单见Eyun 开发文档。处理器按类型分消息事件、成员变动、状态回调各一个互不干扰。这样加功能很轻也方便单独测试某个处理器。三、幂等、异步、补偿三件事幂等按事件 ID 做处理前先查是否处理过处理过直接跳过。异步就是把队列消费放到后台线程或独立进程不阻塞接收。补偿是处理失败后重试但要有次数上限超限进死信并告警。别做无限重试——重试到天荒地老问题还是那个问题。处理模式对照关注点做法关键点常见问题接入层验签去重入队不碰业务回调里处理业务分发路由表处理器新类型只加注册大 if 失控幂等按事件 ID 去重处理前先查重复处理补偿限次重试死信超限告警无限重试回调处理实现import queue import threading class EventDispatcher: def __init__(self): self.handlers {} # 事件类型 - 处理器 self.queue queue.Queue() self.done set() threading.Thread(targetself._loop, daemonTrue).start() def register(self, event_type, handler): self.handlers[event_type] handler # 新类型只加这一行 def on_callback(self, event): # 接入层只验签、去重、入队 eid event[event_id] if eid in self.done: return {code: 0} self.queue.put(event) return {code: 0} # 立即 ACK def _loop(self): while True: event self.queue.get() handler self.handlers.get(event[type]) if handler is None: continue # 未注册的类型先跳过 for attempt in range(3): # 补偿限次重试 try: handler(event) self.done.add(event[event_id]) break except Exception as e: if attempt 2: self.to_dead_letter(event, e) # 超限进死信落地建议回调里只做验签、去重、入队业务放队列后面ACK 才能及时。事件分发用路由表新类型只加注册不改旧代码。幂等按事件 ID 做重复推送直接跳过。失败重试设次数上限超限进死信并告警别无限重试。接入层和业务层分开部署接收受平台时间限制业务不受。微信侧的回调推送由 Eyun 这类个人微信API平台 提供分发与补偿逻辑在自建服务实现具体字段以Eyun 平台为准。