为了让两个交互的系统能够减少耦合,它们之间的消息交换方式应该尽量松散。
为了使交互变得松散,可以采用以下手段或者遵循以下准则:
1. One-Way Messaging. 即异步调用。一个典型的例子就是request/callback: 给对方系统发一个Notification,让对方在它方便地时候回调我们,拿它想要的东西
2. Compensation. 为了保证事务的原子性,一般可以采取“两阶段提交”手段; 但这种手段要求两个系统都要使用相应的基础设施,比较麻烦; 替代方案是在发生单边数据时采用Compensation操作: 要么系统自动把本方已生成的数据取消,要么发一封邮件通知某人在对方系统里手动补上相应数据。
3. Idempotency. 发出请求后却没能收到对方的反馈,那对方倒底是处理请求失败,还是处理请求成功但发送反馈超时? 本方系统不知道,因此不知道能否重发请求。为了解决这个问题,对方系统应该保证重复请求不会产生错误的结果,这样就不怕重复。