#### 服務調用Feign
- 場景舉例
> 項目拆分成訂單服務,庫存服務,積分服務等,現在訂單服務確實知道庫存服務、積分服務、在哪里了,同時也監聽著哪些端口號了。**但是新問題又來了:難道訂單服務要自己寫一大堆代碼,跟其他服務建立網絡連接,然后構造一個復雜的請求,接著發送請求過去,最后對返回的響應結果再寫一大堆代碼來處理嗎?**
- 以前的遠程調用方式

> 使用Feign可以簡化很多,它底層封裝好了輪子
- 首先引入依賴
```
<dependency>
<groupId>com.dg</groupId>
<artifactId>sc-common-lib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Eureka客戶端服務注冊 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 服務調用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Web應用支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 國際化模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
```
- 定義接口 ProductFeignClient.java
```
@FeignClient(value = "sc-eureka-client")
public interface ProductFeignClient {
@GetMapping("/products")
List<Product> listProducts();
}
```
- 定義Controller進行測試
```
@Controller
public class ProductController {
@Autowired
ProductFeignClient productFeignClient;
@RequestMapping("/products")
public Object products(Model m) {
List<Product> ps = productFeignClient.listProducts();
m.addAttribute("ps", ps);
m.addAttribute("version", 1.0);
return "products";
}
}
```
- 瀏覽器測試調用結果,結果正確,遠程調用成功
