1. 基本介绍
Feign是一种负载均衡的HTTP客户端, 使用Feign调用API就像调用本地方法一样,从避免了 调用目标微服务时,需要不断的解析/封装json 数据的繁琐。 Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign。
2. 实战
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
provider
@Data
public class UserDTO {
public static final long serialVersionUID = 1L;
Integer id;
String name;
Integer age;
}
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping("/getName/{name}")
public String getName(@PathVariable("name") String name) {
return String.format("this word: %s is you entered", name);
}
@GetMapping("/getUser/{id}")
public UserDTO getUser(@PathVariable("id") Integer id) {
UserDTO userDTO = new UserDTO();
userDTO.setName("测试名, id: " + id);
userDTO.setId(id);
userDTO.setAge(18);
return userDTO;
}
}
consumer
common.api.UserService
@FeignClient("DEMO-PROVIDER")
public interface UserService {
@GetMapping("/user/getName/{name}")
String getName(@RequestParam(name = "name") String name);
@GetMapping("/user/getUser/{id}")
UserDTO getUser(@RequestParam(name = "id") Integer id);
}
UserController
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
UserService userService;
@GetMapping("/getName/{name}")
public String getName2(@PathVariable("name") String name) {
return userService.getName(name);
}
@GetMapping("/getUser/{id}")
public UserDTO getUser(@PathVariable("id") Integer id) {
return userService.getUser(id);
}
}
访问url: http://localhost:8010/user/getUser/1
{"id":1,"name":"测试名, id: 1","age":18}