Spring MVC项目使用Feign声明式服务调用
Spring MVC项目使用Feign声明式服务调用
什么是声明式服务调用?
拆分成 声明式 服务调用
什么声明式?
可以从编程范式入手了解:
编程范式:
命令式编程(Imperative Programming)
声明式编程(Declarative Programming)
函数式编程(Funational Programming)
面向对象编程(Object-oriented Programming)
声明式编程范式:声明式编程表明想要实现什么目的,应该做什么,但是不指定具体怎么做。
注: 非官方解释
声明式服务调用: 声明调用的URL地址,请求方式,和返回结果,但具体如何调用交给底层实现.
为什么要使用声明式服务调用?
对系统使用方,通过设计声明式的接口,开发者无需关心底层实现,而更多的关注上层业务
对系统实现方,通过声明式的接口,上层使用者接口相对稳定前提下,系统可以不断的迭代优化
对整个系统而言,能够更系统的收集更多信息,能够依据策略进行系统行为优化,提升系统效率
Feign声明式web客户端
使用Feign,只需要声明一个接口即可,不需要关心传参、发送请求、获取响应内容、关闭连接等细节,Feign全部帮我们做好了。
SpringCloud集成了Feign组件,使得SpringCloud服务间调用变得更简单,方便
这里并不是SpringCloud的项目,那如何引入Feign到普通的SpringMVC项目中呢?
SpringMVC集成Feign客户端
1.引入maven依赖
2. 创建接口,声明接口方法
这里使用YesAPI作为第三方服务调用测试
这里以全国大学接口为例:
可以根据大学名称、学校类型、所在省份、所在城市等搜索大学
1.封装返回实体
可以看到小白开放平台是有统一返回体的,我们可以封装起来,也可以直接用Object或者Map来接收数据.我选择数据封装.
YesResponse.java
YesUniversity.java
School.java
2.声明参数
既然是声明式服务调用,必须先声明再调用,结果已经声明了,接下来就是声明参数了,我依然选择数据封装;
可以从上面的请求示例看到,需要3个参数.
YesVo.java
3.声明接口
参数和结果都已经封装好了,接下来就是声明服务接口了
一般是根据对方的uri命名接口
Yes.java
如上,一个服务接口已经声明好了,因为这里使用的是post请求,@QueryMap可以把对象转为body体的参数,@RequestLine可以声明其服务路径
4.服务接口调用
通过service层的封装,可以把一些业务逻辑写在里面
那出现400,500这些异常怎么办?
Feign组件考虑到了,Feign封装了一个Exception叫FeignException
结构如下图:这样我们可以通过这个FeignException的内置API达到我们对接服务的效果.
如果是同一个平台的服务,可以直接在对应的接口上增加接口方法:比如Yes接口
如上的GET请求的写法,也是可以支持的.
3.更多的用法
使用Feign还有更多的用法,可以参考:https://www.jianshu.com/p/f9155711c27f