SpringCloud 宣告式REST客戶端Feign
Feign是一個宣告式的WebService客戶端。使用Feign能讓編寫WebService客戶端更加簡單,它的使用方法是定義一個介面,然後在介面上添加註解,同時也支援JAX-RS標準的註解。Feign也支援可插拔式的編碼器和解碼器。SpringCloud對Feign進行了封裝,使其支援SpringMVC標準註解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支援負載均衡。
如何使用Feign?
新增Feign的依賴
<dependency>
<groupId>org.springframework.cloud</groupId >
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
在入口類上新增@EnableFeignClients註解
專案的目錄結構:
Maven依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId >
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
UserClient.java
@FeignClient("user-server")
public interface UserClient {
@RequestMapping(value="/getByUserId/{userId}", method=RequestMethod.GET)
public String getByUserId(@PathVariable("userId") String userId);
}
UserController.java
@RestController
public class UserController {
@Autowired
private UserClient userClient;
@RequestMapping(value="/getByUserId/{userId}", method=RequestMethod.GET)
public String getByUserId(@PathVariable("userId") String userId){
return userClient.getByUserId(userId);
}
}
application.properties
#\u4FEE\u6539Tomcat\u7AEF\u53E3\u53F7
server.port=8001
#服務註冊中心的配置內容,指定服務註冊中心的位置
eureka.client.serviceUrl.defaultZone=http://192.168.1.12:8761/eureka/
spring.application.name=user-client
StoreClient.java
@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List<Store> getStores();
@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
Store update(@PathVariable("storeId") Long storeId, Store store);
}
@FeignClient註解中的stores屬性可以是一個任意字串,如果與Eureka組合使用,則stores應為Eureka中的服務名,Feign用它來建立一個Ribbon負載均衡器。也可以通過url屬性來指定一個地址,可以是完整的URL,也可以是一個主機名。標註了@FeignClient註解的介面,在ApplicationContext中的Bean例項名是這個介面的全限定名,同時這個Bean還有一個別名,為Bean名+FeignClient。
覆蓋Feign的預設配置
SpringCloud對Feign的封裝中一個核心的概念就是客戶端要有一個名字。每個客戶端隨時可以向遠端服務發起請求,並且每個服務都可以像使用@FeignClient註解一樣指定一個名字。SpringCloud會將所有的@FeignClient組合在一起建立一個新的ApplicationContext,並使用FeignClinetsConfiguration對Clients進行配置。配置中包括編碼器、解碼器和一個feign.Contract。
SpringCloud允許你通過configuration屬性完全控制Feign的配置資訊,這些配置比FeignClientsConfiguration優先順序要高: