和尾怎么杀,新手想全面学求尾的正确写法的方法

如何实现应用内外交互是Quick-Fix框架嘚核心之一,我们常见的应用有提供web服务的(如Spring应用)有进行大数据计算的(如Storm应用),有提供rpc的后台服务(如通过dubbo提供rpc的数据服务)有纯jar服务等;基本上我们可以划分为两类

  • 应用本身,有一套健全的与外界交互的机制(这里不包括db/redis等数据的读写)
  • 应用只关注自己的服務功能(接收数据产生数据,保存数据)本身不与第三方的应用进行交互

针对上面这两种case,我们应该怎么来设计一套应用内外交互的方案来实现接收外部请求,执行应用内部方法或访问应用内部数据并返回结果的目的?

因为不同的应用与外部交互的方式不一样,峩们希望最好能直接复用已有的通信机制来实现我们的需求;比如原来就提供了web服务我们可以在原有的web服务的基础上,新增一个Controller来实现需求;如果应用本身是通过rpc进行通行的且已经有了非常完善的rpc测试辅助工具,然后就希望可以直接在现在已有的rpc基础上新增一个服务來实现应用内外交互;再如果我就是一个独立jar应用,我希望通过http方式与外界交互所以最好框架本身就提供一种默认的交互方案

简单来讲,交互不能写死,最好是有一个规范具体想用哪个实现,可以交给实际使用方来选择和扩展

内外交互首要的就是确认交互的参数,確定需要哪些基本信息可以达到我们的目的;以及结果怎么返回

在设计参数之前,再次明确一下我们的目的:

要实现上面的目的我们需要些什么?

  • service: 用于定位访问的具体类
  • field: 用来定位应用中的数据
  • params: 方法执行需要传入参数

所以我们的req接口如下

针对请求参数进行解释

需要执行嘚服务,可以是完成路径可以是beanName
需要访问的服务内部成员属性,值为属性名;为空时表示执行的服务的某个方法
方法名,需要执行的方法;为空时表示访问某个服务的成员属性值
用来辅助service来定位具体执行的类,如static表示访问的是一个静态类;single表示访问的是单例
请求参数数组,可以不存在格式为 类型#值,对于基本类型可以省略类型的前缀包

单独看表,可能不太好理解下面结合实例进行说明,为什麼要这么设计

a. 静态类和实例的访问

在第一篇的整体设计中就提及到我们采用反射的方式来执行目标方法,因此拿到请求参数后第一步僦是获取执行的类,我们需要执行的是静态类还是实例对于反射而言,这个差别可不小;因此我们就有了type字段用来区分service的类型

比如在框架提供的两种service加载中,对type支持如下

表示service传入的是一个静态类的包路径我们需要访问的是静态类的成员或方法
bean 或不传 或空字符串

目标方法的执行,可以分为两种一个是直接访问某个服务or静态类的方法;另外一个是访问某个服务or静态类的成员属性的方法

上面两种有什么区別呢?

  • 第一种通过传入参数,看返回结果更常见的是为了确认方法的执行逻辑是否有问题
  • 第二种,更多是查询或订正内存数据(应用內存数据往往是以成员属性的方式存在)

所以field,method 这两个参数的组合,就是用来确认上面的两种场景的

方法执行不可避免的就是传参了,參数我们将分为三类

接下来我们约定下传参的规范

全路径#Json序列化对象

接下来给出以下具体的参数解析逻辑


 
 

一灰灰的个人博客,记录所有學习和工作中的博文欢迎大家前去逛逛

尽信书则不如,已上内容纯属一家之言,因个人能力有限难免有疏漏和错误之处,如发现bug或鍺有更好的建议欢迎批评指正,不吝感激

我要回帖

更多关于 尾的正确写法 的文章

 

随机推荐