目录
Feign是什么?
Feign是一个声明性的Webservice 客户端。它使编写Webservice 客户端变得更容易!Feign 是简化Java HTTP客户端开发的工具。它使用注解的方式将HTTP的URL封装成接口,每个URL对应一个接口,大大简化了HTTP客户端的开发。
-
什么是WebService客户端?
-
什么是service?
- 传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务"。通俗地说,"服务"就是计算机可以提供的某一种功能。
- 根据来源的不同,"服务"又可以分成两种:一种是"本地服务"(使用同一台机器提供的服务,不需要网络),另一种是"网络服务"(使用另一台计算机提供的服务,必须通过网络才能完成)。
-
什么是Web Service?
- "网络服务"(使用另一台计算机提供的服务,必须通过网络才能完成)。网络服务采用HTTP和XML(标准通用标记语言的子集)等互联网通用标准,使人们可以在不同的地方通过不同的终端设备访问WEB上的数据
- (Web Service)的本质,就是通过网络调用其他网站的资源。
- 举例来说,写过一个"四川大地震图片墙",它能动态显示关于四川地震的最新图片。但是,所有的图片都不是储存在我的服务器上,而是来自flickr.com。我只是发出一个动态请求,要求flickr.com向我提供图片。这种情况下,flickr.com提供的就是一种Web service。如果我把图片都存放在本地服务器,不调用flickr.com,那么我就是在使用"本地服务"。
-
所以,Web service让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。
-
Web Service的优势:
- 平台无关。不管你使用什么平台,都可以使用Web service。
- 编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。这大大增加了web service的适用性,降低了对程序员的要求。
- 对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。
- 对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情
-
什么时候用Web service?
- 同一家公司的新旧应用之间
- 不同公司的应用之间
- 一些提供数据的内容聚合应用:天气预报、股票行情
-
-
什么是声明性的?
- 注解就是声明式编程最好的体现
- 假如你是一个仓库管理员,公司要求实现自动化仓库管理,购买一大批自动货运机器人!如果按照传统的命令式编程,那肯定是一个机器人就给你一个遥控器,要你遥控机器人把货物搬到指定的地方……这种做法除了比较节省力气之外,一点自动化的意思都没有!;’如果按照声明式编程来做,仓库管理员只需要拿着二维码扫描器逐个检查新到的货物,然后给货物贴上nfc标签,nfc标签存储着货物的名称、种类等信息,货运机器人就自动读取nfc标签的消息,然后把消息发送给仓储服务器,服务器再根据货物种类找出同类货物存放的地点,发送指令让机器人去运送到指定的地点……
- 声明式编程就是把一系列的操作命令封装成一个标签来简化业务逻辑
- 命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。
- 声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。
Feign能干什么?
网络服务间调用(微服务间调用)(服务消费者)
Feign 采用的是基于接口的注解
Feign 整合了ribbon,具有负载均衡的能力
整合了Hystrix,具有熔断的能力
既然有了Ribbon,Feign是怎么出来的?
之前大家用ribbn进行负载均衡,功能很强大,甚至可以自己自定义算法,那么Feign是怎么出来的?
- Ribbon,直接调用微服务来进行访问
- 微服务名字获得调用地址:Ribbon+RestTemplate
- Feign面向接口编程,比如WebService接口,比如我们的Dao接口
- 就是通过接口+注解,,获得我们的调用服务
- Feign集成了Ribbon
- 利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。
怎么写一个Feign