3. SpringCloud基础系列——服务调用Feign

405 阅读1分钟

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}