spring cloud-feign

在微服务架构中肯定少不了服务之间的调用,我们一般会在application.yml声明目标微服务的url地址,在java代码中通过httpclient或spring resttemplate或httpasyncclient工具调用目标微服务。
spring cloud对微服务的调用进行了组件化,用feigin组件进行微服务调用。
feign是一个声明式的WebService客户端。使用Feign能让编写WebService更加简单,它的使用方法是定义一个http接口,然后在接口上添加注解,同时也支持JAX-RS标准的注解。feign也支持可插拔式的编码器和解码器。spring cloud对feign进行了封装,使其支持springMVC标注注解和HttpMessageConverters。feign可以与eureka和ribbon组合使用以支持负载均衡。
上述是理论,下面我们通过code实例讲解:
在spring cloud-eureka讲解中,我们启动eureka服务,用于服务注册与发现。然后启动服务提供方microservice-provider-user,通过microservice-consumer-movie服务消费方调用微服务。文中我们是通过spring的RestTemplate调用的微服务。
如果使用feign,我们只需声明服务调用接口,然后通过@FeignClient调用:

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.itmuch.cloud.entity.User;

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
  // 两个坑:
  // 1. @GetMapping不支持;
  // 2. @PathVariable得设置value;
  @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)  
  public User findById(@PathVariable("id") Long id); 

}

通过上述code可以发现,我们调用微服务使用的是微服务的application name,然后在@RequestMapping注解声明具体的请求接口和请求方式,便实现了微服务的调用。
使用feign调用微服务,即简化了服务调用过程,同时也为eureka+feign+ribbon组合支持微服务负载均衡提供了支持。
下篇文章我们将讲解如何使用eureka+feign+ribbon支持微服务负载均衡。

你可能感兴趣的:(【架构设计】)