Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,hope for change,challenge Survive.
happy for hardess to solve denpendies.
目录
概述
系统接口设计是一个非常常见的需求。
需求:
1.接口通信
2. 共享系统
设计思路
实现思路分析
1.接口通信机制:
当不同的系统之间通信主要是为了传输数据:
一般来说前端后端的方式是HTTP的,更多的是通信协议,都是满足的。
而数据规范是则是建立的协议上的数据格式封装。
如XML格式,JSON格式,字符串格式等,基本类型等,自定义对象格式等,web service 格式等,更多的是数据交换格式。
基本都是基于HTTP承载的。而系统间的关系也是如此:
2.消息机制
将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间,用时100ms
可以明显看出消息队列比串行提高了3倍,比并行提高了两倍。
场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是:订单系统调用库存系统的接口,如下图:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单成功。
库存系统:订阅下单的消息,采取拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
假如:在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。
3.共享存储的形式
这是最基本的方式,显然没有消息队列的方式好:连最基本的JMS都没有:
没有解耦,消息控制,和异步的公共,当然workflow 比较特殊,不可能异步了。
在对接工作流的时候,工作开始表的时候的一张表,最后一张结果表。
首先开始查询流程是不是发起,返回记录集合。如果没有说明都没有发起流程,
如果返回了集合:
集合大小为空,什么都没做,还在待审批中呢,
集合大小不为空:
=》取出对应的流程ID:
ID不存在,还是原来的状态:
ID 存在,在审批中。
然后到结果表查询,
查询不到结果记录集合,异常,审批中,不动。
查询到结果集合,根据不同的状态位设置改变
逻辑结束。
拓展实现
这里参考:github:简单实现上述流程:
入门级实现:
: 部分源码实现.
: 源码实现
性能参数测试:
无
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~