情况描述:
两个不同的业务系统M系统与E系统,两者之间的数据交换采用ESB平台,从而可以保证ESB内部的数据传递流程可以具有一个全局的事务,一旦发生任何异常,都会回滚。
数据传递的方向为从M系统传递至E系统。
前期约定的内容,ESB获取M系统的数据,数据获取方式为从ESB与M系统约定的数据库中间表中获取(相当于M系统的前置机),调用E系统的WebService,将数据写入E系统,并且将调用是否成功的结果写回与M系统约定的中间表中(写回M系统中间表的工作由ESB负责完成),调用E系统的WS之后,除了回写与M系统的中间表,还会有一些其他的数据库更新等操作。(监控与M系统的中间表的增量数据,使用数据库触发器,并在额外的表中,记录增量数据的信息(例如:新增时间等信息),一切顺利之后,把监控到的与M系统的中间表中的增量数据删除掉。)
问题:
- 事务的问题可以交由ESB来处理,可以忽略。
- 调用WS如果数据未能写入E系统,WS不会抛出异常,而是会返回一个未能写入的代码,并返回原因。
- 调用WS成功,并且成功写入E系统,但是,在后续ESB处理其他事情的过程中发生异常,事务照样回滚。而E系统的WS,没有补偿机制,不会对数据是否已经存在进行判断,而且E系统的WS由于各种原因,调用时性能不佳
解决方案:
对于问题1。无需关注。
对于