一.介绍
feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。原理可能很多,但是用起来其实并不是那么复杂。
二.集成操作
- 依赖添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
-
关键注解添加
-
调用接口添加
被调用方代码:
@Slf4j
@RestController
@RequestMapping(value = "/eureka-client/feign")
public class FeignEurekaController
{
/**
* feign调用信息获取
*
* @return
* @exception
* @date 2020/5/7 10:17
*/
@GetMapping(value = "/info")
public ResultVO<?> feignInfo()
{
log.info("FeignController|feignInfo|通过FEIGN调用方式获取数据");
return new ResultVO<>("200", "SUCCESS");
}
}
调用方代码:
public ResultVO<?> feignInfo()
{
log.info("EurekaClientService|feignInfo|信息获取");
ResultVO<?> resultVO = this.eurekaClientFeign.feignInfo();
log.info("EurekaClientService|feignInfo|信息获取|请求出参:={}", resultVO);
return resultVO;
}
- 调用结果
成功调用到被调用方服务!!!
三.补充
如何查看调用接口具体响应时长、路径、请求头等信息,好协助自己优化接口,看下面代码有详细说明:
@Configuration
public class FeignClientConfiguration
{
/**
* Logger.Level 的具体级别如下:
* NONE:不记录任何信息
* BASIC:仅记录请求方法、URL以及响应状态码和执行时间
* HEADERS:除了记录 BASIC级别的信息外,还会记录请求和响应的头信息
* FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
*/
@Bean
feign.Logger.Level feignLoggerLevel()
{
return feign.Logger.Level.FULL;
}
}
Feign的调用方式我目前用到两种:
- 一种是“服务名调用”
@FeignClient(value="qyeurekaclient", fallbackFactory = EurekaClientFallback.class, configuration = {FeignClientConfiguration.class})
- 第二种“Url路径调用”
@FeignClient(name = "github-client", url = "https://ip:port", allbackFactory = EurekaClientFallback.class, configuration = {FeignClientConfiguration.class})
至此,Feign服务集成完毕!!!
微服务项目:微服务集成项目