在上一篇笔记中,我们搭建了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();}
启动类加上注解
@EnableFeignClientspublic 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 {@AutowiredStockService 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 {@Overridepublic void apply(RequestTemplate requestTemplate) {//设置报文头requestTemplate.header("token","123");}}
然后配置加上requestInterceptors即可
feign:client:config:#服务名stock-service:loggerLevel: FULL#链接超时时间,默认2秒connectTimeout: 5000#请求处理超时时间,默认5秒readTimeout: 10000requestInterceptors:- com.suibibk.springCloud.order.feignInterceptor.CustomFeignInterceptor
访问请求可以看到token加上了
