在上一篇笔记中,我们搭建了nacos的环境,然后默认负载均衡就是Ribbon的轮询策略,这里大概介绍feign,暂时就不去深究原理啦,只要会用就可以了,环境搭建参考:一、springCloudAlibaba-nacos环境搭建。
1、feign介绍
feign可以让我们像调用方法一样去调用服务,正常我们都使用openfeign,openfeign兼容ribbon和nacos
2、简单使用
这个是在之前的环境上搭建的,之前我们请求用的是RestTemplate,这里用feign来调用下
pom.xml引用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新建一个service
package com.suibibk.springCloud.order.openfeign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name="stock-service",path="/stock")
public interface StockService {
@RequestMapping("/reduce")
public String reduce();
}
启动类加上注解
@EnableFeignClients
public class OrderApplication {
...
}
跟service一样调用调用
package com.suibibk.springCloud.order.controller;
import com.suibibk.springCloud.order.openfeign.StockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
StockService stockService;
@RequestMapping("/add")
public String add(){
String msg = stockService.reduce();
return "新增订单成功"+msg;
}
}
3、日志级别的修改
feign有4种日志等级
- NONE:性能最佳,适用于生成,不记录任何日志(默认值)
- BASIC:适用于生产环境问题追踪,仅记录请求方法、URL、响应状态码以及执行时间
- HEADERS:在BASIC的基础上,记录请求和响应的header
- FULL:比较适用于开发以及测试环境定位问题,记录请求和响应的header、body和元数据
我们这里开启下,只需要配置文件加上
#springboot默认日志级别是info,feign的debug日志级别就不会输出
logging:
level:
com.suibibk.springCloud.order.openfeign: debug
#openfeign日志局部配置
feign:
client:
config:
#服务名
stock-service:
loggerLevel: FULL
记得这里springboot的一定要改为debug,我们指定com.suibibk.springCloud.order.openfeign包下面的是debug
再请求就看得到日志了
4、超时时间
很简单,配置加上connectTimeout和readTimeout即可
feign:
client:
config:
#服务名
stock-service:
loggerLevel: FULL
#链接超时时间,默认2秒
connectTimeout: 5000
#请求处理超时时间,默认5秒
readTimeout: 10000
5、自定义拦截器
这里指的是feign的拦截器,有时候我们想要再请求发出去的时候可以修改相关信息,比如在报文头加上token。
首先我们新建一个拦截器类
package com.suibibk.springCloud.order.feignInterceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.LoggerFactory;
public class CustomFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
//设置报文头
requestTemplate.header("token","123");
}
}
然后配置加上requestInterceptors即可
feign:
client:
config:
#服务名
stock-service:
loggerLevel: FULL
#链接超时时间,默认2秒
connectTimeout: 5000
#请求处理超时时间,默认5秒
readTimeout: 10000
requestInterceptors:
- com.suibibk.springCloud.order.feignInterceptor.CustomFeignInterceptor
访问请求可以看到token加上了