Feign簡(jiǎn)介
Feign是一個(gè)聲明式的偽Http客戶端章母,它使得寫Http客戶端變得更簡(jiǎn)單而线。使用Feign氛驮,只需要?jiǎng)?chuàng)建一個(gè)接口并注解。它具有可插拔的注解特性寿羞,可使用Feign 注解和JAX-RS注解猖凛。Feign支持可插拔的編碼器和解碼器。Feign默認(rèn)集成了Ribbon绪穆,并和Eureka結(jié)合辨泳,默認(rèn)實(shí)現(xiàn)了負(fù)載均衡的效果。
特點(diǎn)如下:
- Feign 采用的是基于接口的注解
- Feign 整合了ribbon玖院,具有負(fù)載均衡的能力
- 整合了Hystrix(下一篇講到)菠红,具有熔斷的能力
- 引入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 配置文件:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8765
spring:
application:
name: service-feign
- 添加注解:
在程序的啟動(dòng)類加上注解@EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run( ServiceFeignApplication.class, args);
}
}
- 測(cè)試:
定義一個(gè)Feign接口,通過@FeignClient(“服務(wù)名”)难菌,來指定調(diào)用哪個(gè)服務(wù)试溯。比如在代碼中調(diào)用了service-1服務(wù)的“/hello”接口,代碼如下:
@FeignClient(value = "service-1")
public interface SchedualServiceHello {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
String sayHelloFromClientOne(@RequestParam(value = "name") String name);
}
在Controller層郊酒,對(duì)外暴露一個(gè)”/hello”的API接口遇绞,通過上面定義的Feign客戶端SchedualServiceHello去消費(fèi)服務(wù)键袱。代碼如下:
@RestController
public class HelloController {
@Autowired
SchedualServiceHello schedualServiceHello;
@GetMapping(value = "/hello")
public String sayHello(@RequestParam String name) {
return schedualServiceHello.sayHiFromClientOne(name);
}
}
依次啟動(dòng)端口為8761、8762摹闽、8763杠纵、8765的微服務(wù),多次訪問http://localhost:8765/hello?name=tom
钩骇,兩個(gè)service-1實(shí)例會(huì)被輪流調(diào)用比藻,這就說明進(jìn)行了負(fù)載均衡,訪問了不同的端口的服務(wù)實(shí)例倘屹。