
收到回调事件只是第一步把事件和业务动作联动起来才是目的。新好友加了要打标签发欢迎语订单支付了要推送提醒群成员变动要通知管理员。事件到业务的联动要解决联动映射、规则引擎、执行保证三个问题。一、联动映射——哪种事件触发哪条业务链事件和业务是多对多关系。一个事件可能触发多条业务链新好友事件既发欢迎语又打标签一条业务链也可能由多个事件触发订单的完整通知由支付、发货、签收三个事件共同构成。所以需要一个映射表把事件和业务链对应起来。映射表配置化是关键。事件类型有哪些、每种事件触发哪些业务这属于运营配置而不是代码逻辑。写死在代码里的话加一条联动规则就要改代码发版运营没法自己调。二、规则引擎——联动的条件判断不是收到事件就无条件执行联动要过条件判断。条件可能是用户属性是不是新用户、有没有标签、可能是事件属性金额大于多少、事件来源、也可能是时间条件工作时间内才通知。规则引擎的实现是条件表达式加动作列表。条件用表达式描述动作是业务链的入口。规则按优先级排序执行避免多条规则冲突时结果不确定。规则命中后要记录命中日志方便排查某次事件为什么没触发预期联动。三、执行保证——联动不能乱序不能重复事件来得快业务链执行慢这里有两个必须处理的问题顺序和重复。顺序——同一个用户的事件要按发生顺序处理不能因为并发导致后发生的事件先执行。按用户ID哈希到同一队列保证同用户串行。重复——事件可能重复投递业务链重放会造成重复动作。按事件ID加业务链ID组合做幂等同一条业务链对同一个事件只执行一次。事件与业务联动对照环节核心动作工程要点常见坑联动映射事件→业务链配置化规则散落代码条件判断规则引擎优先级日志冲突不确定执行顺序按用户串行哈希分队列并发乱序幂等事件业务链去重组合键重复执行事件回调业务联动实现class EventBusinessLinker: def __init__(self): self.mapping LinkMapping() # 事件→业务链映射 self.rule_engine RuleEngine() # 条件规则引擎 self.processed set() # 幂等缓存 def on_event(self, event): # 查映射该事件关联哪些业务链 chains self.mapping.get_chains(event.type) if not chains: return for chain_id in chains: self.execute_chain(event, chain_id) def execute_chain(self, event, chain_id): # 幂等事件业务链组合去重 key (event.event_id, chain_id) if key in self.processed: return # 条件判断规则引擎过滤 rule self.rule_engine.match(event, chain_id) if not rule: self.log_skip(event, chain_id) # 记录未命中 return self.processed.add(key) # 按用户串行保证顺序 worker_id hash(event.wxid) % WORKER_COUNT self.workers[worker_id].submit( self.run_chain, event, chain_id, rule.actions ) def run_chain(self, event, chain_id, actions): # 执行业务链按动作顺序 for action in actions: try: action.execute(event) except Exception as e: self.record_failure(event, chain_id, action, e) if action.critical: self.rollback(actions) # 关键动作失败回滚 break def log_skip(self, event, chain_id): # 记录未命中日志 self.log_db.insert({ event_id: event.event_id, chain_id: chain_id, reason: rule_not_match, ts: time.time() }) def rollback(self, actions): # 回滚反向撤销已执行动作 for action in reversed(actions): if action.executed: action.undo()落地建议事件到业务的映射要配置化——哪种事件触发哪条业务链属于运营配置写死在代码里加规则要发版。条件判断要有优先级——多条规则命中时执行顺序要确定并记录命中日志方便排查。执行要保证顺序——按用户ID分队列串行避免并发乱序。幂等必须做——事件重复投递时按事件加业务链去重防止重复执行。微信侧的事件回调推送由Eyun这类个人微信API平台 提供联动映射、规则引擎和幂等控制在自建服务实现接口字段以平台开发文档为准。