mPaas-RPC 拦截器各种场景下的使用指南
一 背景
金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中移动网关服务(Mobile Gateway Service,简称 MGS)作为mPaas最重要的组件之一,连接了移动客户端与服务端,简化了移动端与服务端的数据协议和通讯协议,从而能够显著提升开发效率和网络通讯效率。在我们日常运维过程中发现,很多用户在使用客户端RPC组件的时候,有很多不同场景的诉求,比如拦截请求添加业务请求标记,免登,返回结果模拟,异常处理,限流等。本文旨在介绍通过利用RPC提供的拦截器机制,通过不同实际场景的描述,供业务参考使用。
二 RPC调用原理
当 App 在移动网关控制台接入后台服务后,调用RPC的示例代码如下:
值得好奇的是,整个调用过程中其实我们并没有去实现 RpcDemoClient 这个接口,而是通过 MPRpc.getRpcProxy 获取了一个代理,通过代理对象完成了调用。在这里其实主要使用了 Java 动态代理的技术。如下图所示,当调用RPC接口的时候,会通过动态代理的RpcInvocationHandler,回调其实现的invoke方法,最终在invoke内实现数据的序列化处理最后通过网络库发到服务端。
在业务开发中,如果在某些情况下需要控制客户端的网络请求(拦截网络请求,禁止访问某些接口,或者限流),可以通过 RPC 拦截器实现。
三 拦截器
1. 原理
RPC目前采用了拦截器机制实现RPC的自定义处理,如下图所示,业务可以通过设置自定义RpcIntercept实现在请求前,请求异常,请求返回三个阶段对RPC的定制处理。
四 preHandle场景
1. 全局添加业务自定义请求header
典型使用场景:业务添加自定义的业务全局标识或者其他统计字段
2. 阻断当前请求rpc流程
典型使用场景:比如如果当前未登录,对需要登录的rpc先阻断,统一提示登录
五 postHandle场景
1. 拦截接口返回
典型使用场景:全局修改服务端的返回结果,比如mock服务端的数据
六 exceptionHandle场景
1. 异常统一处理
比如登录态失效,服务端会统一返回2000的错误码,客户端可以在exceptionHandle里统一拦截进行登录态免登操作
七 H5场景
由于H5场景中使用的jsapi的rpc,需要支持在js环境里传递到native环境,所以在设计上,是统一通过operationType: alipay.client.executerpc 接口进行的转发,所以针对H5发送的RPC请求,需要做特殊判断,通过入参拿到真实的operationType接口,示例代码如下。
1. 获取H5请求的接口名称和入参
如上图所示,业务通过jsapi去请求rpc,如何获取jsapi请求的rpc名称,可以参考代码如下
版权声明: 本文为 InfoQ 作者【阿里云金融线TAM SRE专家服务团队】的原创文章。
原文链接:【http://xie.infoq.cn/article/3d654173a61e77e8c6e61d20a】。文章转载请联系作者。
评论