簡介
Feign是Spring Cloud提供的一個聲明式的偽Http客戶端, 它使得調用遠程服務就像調用本地服務一樣簡單, 只需要創建一個接口並添加一個注解即可。
Nacos很好的兼容了Feign, Feign默認集成了 Ribbon, 所以在Nacos下使用Fegin默認就實現了負載均衡的效果。
Fegin的使用:加入pom依賴
<!--fegin組件--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
啟動類加入Fegin注解
@SpringBootApplication @EnableDiscoveryClient //服務注冊 @EnableFeignClients //開啟fegin public class OrderApplication {···}
創建商品服務的api接口並使用Fegin實現微服務調用
@FeignClient("service-product")//聲明調用的提供者的name public interface ProductApiService { /** * 指定調用提供者的哪個方法 * @FeignClient+@GetMapping 就是一個完整的請求路徑 http://service-product/product/{pid} * @param pid * @return */ @GetMapping("/product/{pid}") Product getByPid(@PathVariable("pid") Integer pid); }
改造下單方法測試
@Autowired private ProductApiService productApiService; /** * 基於fegin實現遠程服務調用 * @param pid * @return */ @GetMapping("/prod/{pid}") public Order order(@PathVariable("pid") Integer pid){ log.info(">>>客戶下單,調用商品微服務查詢商品信息<<<"); Product product = productApiService.getByPid(pid); log.info(">>商品信息,查詢結果:" + JSON.toJSONString(product)); Order order = new Order(); order.setUid(1); order.setUsername("測試用戶1"); order.setPid(product.getPid()); order.setPname(product.getPname()); order.setPprice(product.getPprice()); order.setNumber(1); // orderService.save(order); return order; }
啟動服務測試接口是否正常調用