1、简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
总结:
Feign 采用的是基于接口的注解
Feign 整合了ribbon,具有负载均衡的能力
整合了Hystrix,具有熔断的能力
2、搭建一个feign的服务eureka-feign
A、导入依赖
在pom文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-eureka、Web的起步依赖spring-boot-starter-web:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
B、定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。
比如在代码中调用了EUREKA-CLIENT服务的“/hello”接口,代码如下:
@FeignClient(value = "EUREKA-CLIENT")
public interface EurekaClientService {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
String home(@RequestParam(value = "name") String name);
}
C、在Web层的controller层,
对外暴露一个"/hello"的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:
@RestController
public class HelloController {
@Autowired
EurekaClientService eurekaClientService;
@GetMapping(value = "/hello")
public String sayHi(@RequestParam String name) {
return eurekaClientService.home(name);
}
}
3、启动程序,多次访问http://localhost:8765/hello?name=adou,浏览器交替显示:
hello adou,i am from port:8762
hello adou,i am from port:8763
4、架构说明
一个服务注册中心,eureka server,端口为8761
eureka-client工程跑了两个实例,端口分别为8762,8763,分别向服务注册中心注册
eureka-feign端口为8765,向服务注册中心注册