feign是一款Netflix开源的声明式、模板化的http客户端,它可以更加便捷、优雅的调用http api;SpringCloud对Netflix的feign进行了增强,使其支持spring并整合了ribbon、eureka以提供负载均衡的http调用。
1、引入openfeign依赖
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-openfeign</artifactId> 4 </dependency>
2、启动类加上feign注解(需要eureka的支持,所以此模块首先需要为eureka客户端)
)第一种,针对类扫描feign api
@EnableFeignClients(clients = {Xxx1.class, Xxx2.class})
)第二种,针对包扫描feign api
@EnableFeignClients(basePackages = {"com.xxx.xxx"})
3、定义feign api
feign api只需与模块的api保持一致就可以了
)模块:
1 @RestController 2 @RequestMapping("/ad") 3 public class AdApi { 4 5 @GetMapping("/getUserAd/{account}") 6 public String getUserAd(@PathVariable(name = "account") String account) { 7 return "这是" + account + "的广告"; 8 } 9 }
)feign api:
1 @FeignClient(name = "ad-model") 2 public interface AdRemoteService { 3 4 @GetMapping("/ad/getUserAd/{account}") 5 String getUserAd(@PathVariable(name = "account") String account); 6 }
4、调用
调用方式很简单,就像调用方法一样就可以了
1 @Autowired 2 private AdRemoteService adRemoteService; 3 4 @GetMapping("/login/{account}/{password}") 5 public String login(@PathVariable String account, @PathVariable String password) { 6 UserDTO userDTO = USER_INFO.get(account); 7 if (userDTO == null) { 8 return "FAILED"; 9 } 10 11 boolean result = userDTO.getPassword().equalsIgnoreCase(password); 12 if (!result) { 13 return "FAILED"; 14 } 15 16 // 调用广告接口 17 String adResult = adRemoteService.getUserAd(account); 18 System.err.println(adResult); 19 20 return "SUCCESS"; 21 }
SpringCloud学习笔记(六、SpringCloud Netflix Feign)
原文:https://www.cnblogs.com/bzfsdr/p/11661968.html