数字交易系统使用远程方法调用(RMI)应用场景实现
一、应用场景介绍
- 在交易系统微服务创建委托订单时,需调用账务系统微服务冻结金额等相关业务。
- 订单成交时,需调用账务系统微服务转账等相关业务。
……
应用场景举例一二,还有很多场景,场景不是本文的重点,不多介绍。主要介绍根据需求场景如何通过技术实现 。
二、远程方法调用(RMI)介绍
RMI通过Spring HTTP Invoker来实现,Spring HTTP invoker 是 spring 框架中的一个远程调用模型,执行基于 HTTP 的远程调用(意味着可以通过防火墙),并使用 java 的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象。
Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。
三、远程方法调用实现
远程访问流程
Spring HttpInvoker具体实现
业务场景:在交易系统服务创建委托订单时,需调用账务系统服务冻结金额等相关业务。
1) 服务端定义账务服务接口
2) 服务端创建账务服务接口的具体实现类
3) 公开服务
4) 客户端定义账务服务端接口
客服端和Server端声明的DTO要一样,包名和字段名都要一样才行,这个接口将会被看做是客户端和服务端通信的“契约”。接口定义的类与DTO相关的类可以作为公用服务API工程,客户端与服务端分别引用这个共用的API工程。
5) 客户端配置账务服务参数
6) 客户端访问账务服务接口
- 在交易类中添加服务对象属性
- 调用远程服务
到此使用Spring HTTP invoker 实现RMI过程完成,每种技术都有它的缺点。在选择一种技术时,应该仔细考虑每种技术适用应用场景即可。
当使用RMI时,不可能通过HTTP协议访问对象,除非你用HTTP包裹RMI流。RMI是一种重量级协议,因为它支持整个对象的序列化,适合网络上传输复杂数据结构。然而,基于Spring HTTP invoker 的RMI:它是一种Java-to-Java的远程访问解决方案。
不定期更新技术点的文章。请关注头条号 “软件开发漫谈”