上一篇文章,講述瞭如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。
Feign簡介
Feign是一種聲明式、模板化的HTTP客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要創建一個接口並註解。它具有可插拔的註解特性,可使用Feign註解和JAX-RS註解。Feign支持可插拔的編碼器和解碼器。Feign默認集成了Ribbon,並和Eureka結合,默認實現了負載均衡的效果。
簡而言之:
- Feign 採用的是基於接口的註解
- Feign 整合了ribbon
服務提供
這一篇文章基於上一篇文章的工程,啓動sso-server,端口爲8088; 啓動serviceA兩次,端口分別爲8089、8090。
創建Feign服務
建一個服務消費者工程,取名爲:service-feign
pom.xml文件爲
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot-feign</artifactId>
<groupId>com.chenjay.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sso-feign</artifactId>
</project>
在父工程的pom文件中加入pring-cloud-starter-feign依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
在工程的配置文件指定服務的註冊中心地址爲http://localhost:8088/eureka/,程序名稱爲 service-feign,程序端口爲8091。配置文件application.yml如下:
server:
port: 8091
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8088/eureka/
spring:
application:
name: service-feign
在程序的啓動類ConsumerApplication ,加上@EnableFeignClients註解開啓Feign的功能:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
定義一個feign接口,通過@ FeignClient(“服務名”),來指定調用哪個服務。比如在代碼中調用了serviceA服務的“/hello”接口,代碼如下:
@FeignClient(value = "serviceA")
public interface SchedualServiceHello {
@GetMapping(value = "/hello")
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
在Web層的controller層,對外暴露一個"/hello"的API接口,通過上面定義的Feign客戶端SchedualServiceHi 來消費服務。代碼如下
@RestController
public class HelloController {
@Autowired
SchedualServiceHello schedualServiceHello;
@GetMapping(value = "/hello")
public String Hello(@RequestParam String name){
return schedualServiceHello.sayHiFromClientOne(name);
}
}
測試
啓動程序,多次訪問http://localhost:8091/hello?name=lucy,瀏覽器交替顯示:
源碼下載:https://github.com/chenjary/SpringCloud/tree/master/springcloud-feign