第三篇:SpringCloud之服務消費(Feign)
上一篇文章,講述瞭如何通過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