





业务系统接口集成通用方案,主流有两种模式,主流有两种模式:消息队列异步推送和定时任务批量拉取。两种模式没有优劣,关键看业务对实时性和数据量的要求。选错模式,要么系统扛不住压力,要么数据延迟影响业务。下面从原理、场景、一致性三方面对比。
消息队列模式是"事件触发":A系统数据一变,立刻把变更事件推到消息队列,B系统订阅这个队列,收到事件后实时更新自己的数据。常见实现有RabbitMQ、Kafka、RocketMQ。这种模式的好处是实时性高(秒级)、系统间耦合低——A不用知道B是谁、B挂了也不影响A。
长丰县企业常见场景:订单系统下单后,库存系统扣减库存、财务系统生成凭证、短信系统发通知,三个下游系统订阅订单创建事件,各自处理,互不干扰。
消息队列还要配死信队列:处理失败的消息转存到死信队列,人工或自动重处理。不配对,失败消息就丢了,两边数据对不上。死信队列要有监控,堆积超过一定数量告警。
定时任务模式是"周期拉取":每隔固定时间(5分钟、1小时、每天凌晨),B系统主动调用A系统的接口,拉取这段时间内的变更数据。常见实现是XXL-Job、ElasticJob或简单的Spring定时任务。
这种模式实现简单,不需要额外部署消息中间件,适合数据量不大、实时性要求不高的场景。缺点是有延迟——最快也要等下一个周期,且每次拉取要带时间戳避免重复。
定时任务要配分片机制:数据量大时,多台服务器分片拉取,每台拉一部分,否则单台跑全量太慢。还要配失败重试:任务跑失败了,隔几分钟自动重跑,不要等下次周期。

两种模式不是非此即彼。一个企业的集成架构里,可能同时用消息队列和定时任务:核心交易链路用消息队列保证实时性,报表和对账用定时任务批量跑。混合架构最常见。
集成上线前还要做压测。模拟峰值并发,看接口能不能扛住。平时好好的系统,大促时挂了,往往是没做压测。压测报告要作为上线依据。
以下场景必须用消息队列:下单后立即扣库存(超卖风险)、支付成功后立即开通会员、审批通过后立即通知下一节点。这些场景延迟几分钟就可能出业务事故,不能等定时任务轮询。
另外,下游系统多(超过3个)时也推荐消息队列。如果用定时任务,每个下游都来轮询A系统,A的接口压力会很大。消息队列由A统一推送一次,多个下游各自订阅,压力分散。
以下场景用定时任务更合适:每天凌晨同步前一天的订单数据到报表系统、每小时汇总一次库存数量生成日报、月底批量对两个系统的账单。这些场景数据量大、实时性要求低,定时任务批量拉取效率更高。
长丰县企业做财务对账、报表汇总、历史数据归档,基本都用定时任务,凌晨跑批,不影响白天业务。
消息队列不是发出去就万事大吉。要保证:消息不丢(持久化+确认机制)、消息不重复(消费端幂等)、消息不积压(监控堆积量)。每个消息带唯一业务ID,消费端处理前先查这个ID有没有处理过,处理过就跳过。
定时任务最大的坑是重复执行。任务跑到一半服务器重启,下次又从头跑,数据就重复了。解决办法:每次拉取带"已处理最大ID"或"时间戳水位",下次从这个位置继续;写入前先查记录是否存在,存在就更新不存在就插入(upsert)。
集成还要考虑安全。接口不能裸奔:要有鉴权(谁能调)、限流(防止刷爆)、IP白名单(只允许信任的系统调用)。这些配置不做,接口就是公开的后门。
集成做完不是结束。每季度检查一次:接口成功率多少、消息堆积多少、失败告警有没有漏。系统在跑,监控不能停。
集成完还要做对账机制。每天自动比对两个系统的数据,不一致就告警。没有对账,数据悄悄对不上,三个月后发现差了几十万,追都追不回来。
集成方案还要考虑扩展性。未来要加新系统进来,接口能不能快速接入。架构设计时预留扩展位,不要每次加系统都推倒重来。
集成方案还要做容灾。主接口挂了能不能切备用?消息队列挂了能不能本地缓冲?这些都要提前设计,不能等出问题再想。
集成方案上线后,要做一次全链路压测。模拟业务峰值,看每个环节的响应时间、错误率、资源占用。压测过了,大促才不慌。
两种模式都要配失败告警:消息队列消费失败超过3次报警、定时任务执行失败立即告警。长丰县企业的接口集成上线后,监控告警没配等于裸奔,出了问题业务部门比技术先发现。