本文章是系列文章中的一篇,,本文章實(shí)現(xiàn)的是 使用 FeignClient 來實(shí)現(xiàn)微服務(wù)之間的相互調(diào)用,,將所有的 FeignClient 封裝在一起。 Feign是一個(gè)聲明式的http客戶端,,官方地址: https://github.com/OpenFeign/feign
本項(xiàng)目中目前創(chuàng)建了兩個(gè)微服務(wù),,order-service 訂單服務(wù);user-service用戶服務(wù),,要實(shí)現(xiàn)的需求是在 訂單服務(wù)中,,調(diào)用 user-service用戶服務(wù)的查詢用戶詳情接口。 FeignClient用來聲明一個(gè)接口是一個(gè)Feign客戶端,,它可以輕松地與其他服務(wù)進(jìn)行通信,,而無需編寫大量的樣板代碼。 在SpringCloud 中,,有兩中方式來實(shí)現(xiàn)微服務(wù)之間的相互調(diào)用: 使用RestTemplate進(jìn)行服務(wù)間的HTTP調(diào)用RestTemplate是Spring提供的用于訪問Rest服務(wù)的客戶端工具類 RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject("http://SERVICE-PROVIDER/hello", String.class); 特使用Feign進(jìn)行服務(wù)間的HTTP調(diào)用@FeignClient(value = "SERVICE-PROVIDER") public interface HelloService { @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello(); }
如下圖是本實(shí)例實(shí)現(xiàn)的微服務(wù)的一個(gè)基本調(diào)用方式: 首先創(chuàng)建一個(gè)module,,命名為feign-api 然后填寫 module 的基本信息 然后刪除 自動(dòng)生成的多余的部分,留下空的項(xiàng)目 然后在 order-service 與 user-service 中添加 feign-api 的依賴如下 <dependency> <groupId>com.biglead</groupId> <artifactId>feign-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
然后在 feign-api 中添加 openfeign 的依賴如下 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
<!-- https:///artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
<!--httpClient連接池的依賴 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency>
Spring Cloud Starter OpenFeign 依賴是用于在 Spring Cloud 應(yīng)用程序中使用 OpenFeign 進(jìn)行聲明式 REST 調(diào)用的,。
spring-cloud-starter-loadbalancer 它提供了一個(gè)輕量級的客戶端負(fù)載均衡器,,可以用于在微服務(wù)架構(gòu)中進(jìn)行服務(wù)發(fā)現(xiàn)和負(fù)載均衡,。 Feign-HttpClient是一個(gè)Java HTTP客戶端,它是Feign庫的一部分,,用于簡化HTTP API客戶端的開發(fā),。它允許您使用注釋來定義HTTP API,然后使用Feign-HttpClient來處理HTTP請求和響應(yīng),。 然后在 feign-api 中創(chuàng)建一個(gè)調(diào)用用戶服務(wù)的 FeignUserClient FeignClient用來聲明一個(gè)接口是一個(gè)Feign客戶端,,它可以輕松地與其他服務(wù)進(jìn)行通信,而無需編寫大量的樣板代碼,。 然后在 order-service 的啟動(dòng)類中 指定Feign應(yīng)該掃描的包: import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients(basePackages = "com.biglead.feign.clients") @SpringBootApplication @MapperScan(basePackages = "com.biglead.orderservice.mapper") public class OrderServiceApplication {
public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); }
}
然后啟動(dòng)服務(wù)測試 當(dāng)然在實(shí)際業(yè)務(wù)處理中,,還有很多細(xì)節(jié)要進(jìn)行處理,一文很難說完善,,這里只是描述了核心的一個(gè)思想,。 最后就是源碼了: https://gitee.com/android.long/spring-cloud-biglead/tree/master/biglead-api-04-feign
|