三、微服务声明式REST调用之Feign


Feign简介

在负载均衡篇的示例中使用RestTemplate实现REST API调用:

@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) {
    return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);
}

如果要请求更多参数的 URL:

http://localhost:8010/search?name=张三&username=account1&age=20.....

如果使用拼接字符串的方式构建 URL:

public User[] findById(String name, String username, Integer age) {
    Map<String, Object> paramMap = Maps.newHashMap();
    paramMap.put("name", name);
    paramMap.put("username", username);
    paramMap.put("age", age);
    return this.restTemplate.getForObject("http://microservice-provider-user/search?name={name}&username={username}&age={age}", User[].class, paramMap);
}

这样的代码将变得难以维护。

  • FeignNetflix开发的声明式、模板化的 HTTP 客户端,Feign可以帮助我们更快捷、优雅地调用 HTTP API。
  • Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者 JAX-RS 注解等。
  • Spring CloudFeign进行了增强,使Feign支持了Spring MVC注解,并整合了RibbonEureka,从而让Feign的使用更加方便。

为服务消费者整合Feign

  1. 启动一个Eureka注册中心,启动两个Eureka服务提供者(传送门);

  2. 创建服务消费者,在pom文件中添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
  1. 创建启动类:
@SpringBootApplication
@EnableFeignClients
public class ConsumerMovieApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerMovieApplication.class, args);
    }
}
  1. 创建Feign接口,添加@FeignClient注解:
@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {

    @GetMapping(value = "/{id}")
    public User findById(@PathVariable("id") Long id);
}

@FeignClient注解用于创建Ribbon负载均衡器。Ribbon会把microservice-provider-user解析成Eureka Server中注册表中分服务。

  1. 创建 Controller:
@RestController
public class MovieController {

    @Autowired
    private UserFeignClient userFeignClient;

    @GetMapping("/user/{id}")
    public User findById(@PathVariable Long id) {
        return this.userFeignClient.findById(id);
    }
}
  1. 启动服务即可。

该文章摘自《Spring Cloud 与 Docker 微服务架构实战(第二版)》

以上


文章作者: Qliang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Qliang !
评论
 上一篇
四、微服务容错处理之Hystrix 四、微服务容错处理之Hystrix
实现容错的手段雪崩效应我们常把”基础服务故障”导致”级联故障”的现象称为雪崩效应。雪崩效应描述的是提供者不可用导致消费者不可用,并将不可用逐渐放大的过程。 如图所示,A 作为服务提供者(基础服务),B 为 A 的服务消费者,C 和 D 是
2019-01-23
下一篇 
二、微服务客户端负载均衡之Ribbon 二、微服务客户端负载均衡之Ribbon
Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制 HTTP 和 TCP 的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们
2019-01-17
  目录