一、进入正题
交互图笔者从属于金融领域,肯定免不了要和银行打交道。业务系统要想做到和银行完全隔离,就免不了中间代理,中间代理只专注于处理和银行对接,接收请求,响应请求,处理编码解码、重连等一系列操作。具体业务系统怎么调用,他们无需关心。这样业务系统就能和银行系统完全解耦开了,即使将来某一天银行的通信协议或者接口变更,对业务系统来说,都是无感知的,只需在中间代理层做修改即可。
这里我主要想强调下中间代理中间状态的重要性。业务系统发起一笔业务,中间系统接收业务系统请求,封装通信协议 发送给银行,然后银行解析请求,操作具体业务,将结果返回给中间代理,中间代理负责解析请求,将结果告诉业务系统。试想中间代理要是状态不明,哪条链路断了都不清晰,解决问题就十分困难了。
其中涉及到4个链路,每个链路都有可能出问题。而且中间代理层要涉及到对请求和响应消息的编码和解码,有可能会因为一方的更改没有告诉另一方导致失败,所以中间代理层必须得定义出6个状态来标识一个正常的请求响应链路进行到了哪一步,而且都要详细记录请求报文和响应报文。
业务系统->中间代理: 已上报
中间代理自处理:上报待处理
中间代理->银行: 已发送
银行->中间代理:待响应
中间代理自处理:响应待处理
中间代理->业务系统:已完成
只有把这些状态边界定义清楚了,才能知道系统的问题出在哪里,才会有针对性的解决方案。
二、思考
其实不仅仅是业务系统,设计到很多层面。例如 当我们的业务系统依赖MQ来做解耦时,就可以利用中间状态来实现消息的一致性问题,要保证业务成功 消息就成功,同理,业务失败,消息也要失败。(具体可以参加大型网站与java中间件中的互联网中间件这一章节)
网友评论