Feign简介
Feign是一个http请求调用的轻量级框架,可以以java接口注解的方式调用http请求,而不用像java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。
服务间的调用
需求背景:eureka注册中心已经搭建好,现在有两个微服务之间想要进行通信,并且这两个微服务都已经在eureka中注册好了,也就是说tensquare_qa服务想要调用tensquare_base服务中的接口,那该如何实现呢?
1、既然是tensquare_qa想要调用tensquare_base,那就在tensquare_qa中添加一些配置。
首先在tensquare_qa模块添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、修改tensquare_qa模块的启动类,添加注解
@EnableDiscoveryClient
@EnableFeignClients
3、在tensquare_qa模块创建com.tensquare.qa.client包,包下创建接口
@FeignClient("tensquare-base")
public interface BaseClient {
@RequestMapping(value = "/label/findById/labelId/{labelId}",method = RequestMethod.GET)
public Result findById(@PathVariable("labelId") String labelId);
}
@FeignClient注解用于指定从哪个服务中调用功能,注意里面的名称与被调用的服务名称保持一致,并且不能包含下划线。
@RequestMapping注解用于对被调用的微服务进行地址映射。
注意:@PathVariable注解一定要指定参数名称,否则出错。@RequestMapping中要包含原先controller的RequestMapping名字(这里是 /label),否则也会出错。
4、修改tensquare_qa模块的ProblemController
@Autowired
private BaseClient baseClient;
@RequestMapping(value = "/label/{labelId}",method = RequestMethod.GET)
public Result findByLableId(@PathVariable String labelId){
Result result=baseClient.findById(labelId);
return result;
}
5、在swagger上测试接口是否能调通,结果如下,成功返回结果。
小结
整个过程也非常简单,我整理了下面几个步骤:
1、调用方引用openfeign依赖
2、调用方启动类添加注解@EnableDiscoveryClient和@EnableFeignClient
3、调用方创建Client接口,用@FeignClient指定被调用方名称
4、调用方在controller中编写调用的方法,只修改controller即可实现调用另一个服务的方法