SpringCloud之Feign实现服务间的调用

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即可实现调用另一个服务的方法

发布了198 篇原创文章 · 获赞 245 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Sophia_0331/article/details/105769650