连载:3-spring-cloud-feign

声明式调用Feign
【GitHub地址:https://github.com/NullPointer8023/eureka】
一、搭建feign客户端
承接上篇,项目中已经包含了eureka(3个实例)、client(2个实例),新建一个module,名为eureka-feign-client。
1、项目结构
在这里插入图片描述

2、pom.xml
引入feign的依赖
在这里插入图片描述

3、application.yml
添加feign的相关配置,feign以服务的方式注册到配置中心,所以同样配置服务的端口号、服务名及对应要注册的eureka服务。
在这里插入图片描述

4、启动类FeignApplication
首先feign以client注册在eureka中,所以在程序启动类上需要加入@EnableEurekaClient,同时加入@EnableFeignClients注解开启Feign Client的功能。
在这里插入图片描述

5、新建配置类
在类上添加@Configuration注解,声明该类为配置类,并注入一个BeanName为feignRetryer的Retryer的Bean。
注入该bean之后,Feign在远程调用失败后会进行重试,默认是不重试,Retryer.NEVER_RETRY。
通过覆盖了默认的Retryer的bean,更改了该FeignClient的请求失败重试的策略,重试间隔为100毫秒,最大重试时间为1秒,重试次数为5次。
在这里插入图片描述

6、实现Feign Client
新建一个EurekaClientFeign的接口,在接口上添加@FeignClient标签,让feign能够扫描到相关配置。
在这里插入图片描述

7、创建service层,通过EurekaClientFeign接口去远程调用eureka-client服务。
目前IDEA环境中提升的不能@Autowired没有发现如何去掉,但不影响服务的正常使用
在这里插入图片描述

8、编写controller
正常开启@RestController功能,调用service中的方法
在这里插入图片描述

9、到此所有代码准备工作完成,启动eureka服务,分别注册2个client,启动feign,作为一个服务注册到eureka server中。
通过访问feign client,内部调用client两个实例,会发现自带负载均衡效果,会打到两台不同的实例上。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、分析
1、查看起步依赖spring-cloud-start-feign的pom,可以查看起步依赖中引入了ribbon和hystrix。FeignRibbonClientAutoConfiguration类配置了Client的类型(包括HttpURLConnection、OKHttp和HttpClient),最终向容器注入的是client的实现类LoadBalancerFeignClient,即负载均衡客户端。

2、Feign是一个伪Java Http客户端,Feign不做任何的请求处理。Feign通过处理注解生成Request模板,从而简化了Http API的开发。开发人员可以使用注解的方式定制Request API模板。在发送Http Request请求之前,Feign通过处理注解的方式替换掉Request模板中的参数,生成真正的Request,并交给Java Http客户端去处理。利用这种方式,卡发着只需要关注Feign注解模板的开发,而不用关注Http请求本身,简化了Http请求的过程,使得Http请求变得简单和容易理解。

猜你喜欢

转载自blog.csdn.net/zzzbbbjjj/article/details/84257546
今日推荐