1、Feign受Retrofit、JAXRS-2.0和WebSocket的影响,采用了声明式API接口风格,将Java http客户端绑定到它的内部。Feign的首要目标是将Java http客户端的调用变得简单。
2、新建一个Springboot的Moudle工程,取名为eureka-feign-client。首先,在工程的pom文件中加入相关的依赖,包括髌覆李幌继承了主maven工程的pom文件、Feign的起步依赖spring-cloud-starter-feign、Eureka Client的起步依赖spring-cloud-starter-eureka、Web功能的起步依赖spring-boot-starter-web,以及Spring boot测试的起步依赖spring-boot-starter-test,代码如下:
3、引入这些依赖之后,在工程的配置文件application.yml做相关的配置,包括配置程序名为eureka-feign-client,端口号8765,服务注册地址为 http://localhost:8761/eureka/ ,代码如下:
4、在程序的启动类EurekaFeignClientApplication加上注解@EnableEurekaClient开启eureka client的功能,通过注解@EnableFeignClients开启Feign Client的功能,代码如下:
5、通过以上3个步骤,该程序就具备了Feign的功能,现在来实现一个简单的Feign Client。新建一个EurekaFeignClient的接口,在接口上加上@FeignClient注解来声明一个Feign Client,其中value为远程调用其它服务的服务名,FeignConfig.class为Feign Client的配置类。在EurekaFeignClient接口内部有一个sayHiFromClientEureka()方法,该方法通过Feign来调用eureka-client服务的“/hi”的API接口,代码如下:
6、在FeignConfig类上加上@Configuration注解,表明该类是一个配置类,并注入了一个BeanName为feignRetryer的Retryer的Bean。注入该bean后,Feign在远程调用失败后会进行重试。代码如下:
7、在Service层的HiService类注入EurekaFeignClient的bean,通过EurekaFeignClient去调用sayHiFromClientEureka()方法,代码如下:
8、在HiController类上加上@RestController注解,开启RestController的功能,写一个API接口“/hi”,在该接口调用了HiService的sayHi()方法。HiService通过EurekaFeignClient远程调用eureka-client服务的API接口“/hi”。代码如下:
9、启动eureka-server工程,端口号为8761;启动两个eureka-client工程的实例,端口号分别为8762和8763;启动eureka-feign-client工程,端口号为8765,此时工程的架构图如下:
10、在浏览器多次访问 http://localhost:8765/hi ,浏览器为轮流饺咛百柘显示以下内容:hi xiongyan, i 锾攒揉敫am from port: 8762hi xiongyan, i am from port: 8763由此可见,Feign Client远程调用了eureka-client服务(存在端口为8762和8763的两个实例)的“/hi”API接口,Feign Client有负载均衡的能力。