🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 服务调用Feign - 场景举例 > 项目拆分成订单服务,库存服务,积分服务等,现在订单服务确实知道库存服务、积分服务、在哪里了,同时也监听着哪些端口号了。**但是新问题又来了:难道订单服务要自己写一大堆代码,跟其他服务建立网络连接,然后构造一个复杂的请求,接着发送请求过去,最后对返回的响应结果再写一大堆代码来处理吗?** - 以前的远程调用方式 ![](https://box.kancloud.cn/02f1f7ec8392a601ab7a8a0fd0d461e1_781x553.png) > 使用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"; } } ``` - 浏览器测试调用结果,结果正确,远程调用成功 ![](https://box.kancloud.cn/08f7717d519c6f41772ad3382c985ce2_1024x238.png)