赞
踩
以上是最常见的几种调用接口的方式,下面介绍比上面更简单方便的方式---- Feign
<!--OpenFeign 远程调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient
:指定远程调用的服务和方法/**
* name:指定调用的Rest接口的服务名
* path:指定调用的Rest接口的请求路径,即:StockController指定的@RequestMapping中的路径
* configuration:指定配置类
*/
@FeignClient(name = "StockService",path = "/stock/stockapi",configuration = FeignConfig.class)
public interface StockFeignService {
//声明需要调用的Rest接口对应的方法
@RequestMapping("/handle")
String getStock();
}
@EnableFeignClients
:开启远程调用@SpringBootApplication
@EnableFeignClients
//这里设置要为哪个服务提供方选用指定的负载均衡的规则
@RibbonClients(value = {
@RibbonClient(name = "StockService", configuration = RibbonConfig.class)
})
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
@RestController
@RequestMapping("/orderapi")
public class OrderController {
@Autowired
private StockFeignService stockFeignService;
@RequestMapping("/add")
public String addOrder(){
System.out.println("OpenFeign方式调用:下单成功");
String stock = stockFeignService.getStock();
return "下单成功:"+ stock;
}
}
NONE
【性能最佳,适用于生产】:不记录任何日志(默认值)。BASIC
【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。HEADERS
:记录BASIC级别的基础上,记录请求和响应的header。FULL
【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。/** * 全局配置:如果使用了@Configuration注解,将会对所有的服务提供方都执行该配置 * 局部配置: * 1、如果想针对某一个服务进行配置,就不要加@Configuration注解 * 2、通过配置文件进行配置 */ @Configuration public class FeignConfig { /** * 设置feign的日志级别 * @return */ @Bean public Logger.Level feignLoggerLevel(){ return Logger.Level.BASIC; } }
# SpringBoot默认的日志级别是info,feign的日志级别是debug
logging:
level:
root: info
com.example.order.feign: debug # 设置feign服务所在包下的日志级别
# Feign日志局部配置
feign:
client:
config:
StockService: # 对应的服务名称
loggerLevel: FULL # 设置日志级别
@Configuration
public class FeignConfig {
/**
* 设置feign请求超时时间
* @return
*/
@Bean
public Request.Options options(){
return new Request.Options(5000, 5000);
}
feign:
client:
config:
StockService: # 对应的服务名称
loggerLevel: FULL # 设置日志级别
connect-timeout: 5000 # 设置连接超时时间 默认2000(2秒)
read-timeout: 3000 # 设置读取超时时间 默认5秒
public class FeignInterceptor implements RequestInterceptor {
Logger logger = LoggerFactory.getLogger(FeignInterceptor.class);
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("token","123456789");
requestTemplate.query("id","111");
logger.info("feign拦截器");
}
}
@Configuration
public class FeignConfig {
/**
* 自定义拦截器
* @return
*/
@Bean
public FeignInterceptor feignInterceptor(){
return new FeignInterceptor();
}
feign:
client:
config:
StockService: # 对应的服务名称
requestInterceptors[0]: #拦截器配置
com.example.order.interceptor.FeignInterceptor
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。