简介
OpenFeign是SpringCloud提供的一个声明式客户端组件,可以通过注解和接口的组合实现服务的远程接口调用,并且与Eureka和Ribbon组合使用能够实现负载均衡的效果
OpenFeign的服务调用
1.在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在主启动类上添加@EnableFeignClients
注解,开启Feign支持
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
3.创建feignClient接口,并添加注解(指定需要调用的服务和接口)
//value:指定要调用的微服务的名称
@FeignClient(value = "sword-provider")
public interface ConsumerFeignClient {
//指定服务提供者的接口和访问路径,以进行后续的远程访问
@GetMapping("/provider/port")
String getPort();
}
4.在Controller中注入后,发起远程调用
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Autowired
private ConsumerFeignClient consumerFeignClient;
@GetMapping("port")
public String getPort(){
return consumerFeignClient.getPort();
}
}
测试:访问http://localhost:9001/consumer/port
OpenFeign超时控制
OpenFeign远程调用的默认等待时长为1秒,超时后报错
image.png
1.在消费者服务的application.yml文件中设置超时时间
# 设置fegin客户端的超时时间
ribbon:
# 设置获取资源超时时间
ReadTimeout: 5000
# 设置建立连接的超时时间
ConnectTimeout: 5000
2.在服务提供者端的接口处设置睡眠时间
@RestController
@RequestMapping("provider")
@RefreshScope
public class ProviderController {
@Value("${server.port}")
private String port;
@GetMapping("port")
public String getPort(){
// 睡眠3秒
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return port;
}
}
3.在服务消费者端打印时间
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Autowired
private ConsumerFeignClient consumerFeignClient;
@GetMapping("port")
public String getPort(){
System.out.println("开始时间:"+System.currentTimeMillis()/1000);
String port= consumerFeignClient.getPort();
System.out.println("结束时间:"+System.currentTimeMillis()/1000);
return port;
}
}
重启后访问:http://localhost:9001/consumer/port,发现等待一段时间后,页面获取到端口值,访问成功,说明时间控制生效
控制台打印信息如下:
OpenFegin日志增强
OpenFeign提供了日志打印功能,能够对feign借口的调用情况进行监控和输出
Fegin的日志级别:
- NONE:默认的,不显示任何日志
- BASIC:记录请求方法、URL,响应状态码和执行时间
- HEADERS:除BASIC中的信息之外,还包含请求和响应的头信息
- FULL:除了HEAADERS中的信息外,还包括请求和相响应的正文和元数据
1.定义日志Bean:
@Configuration
public class FeignLog {
@Bean
public Logger.Level logger(){
return Logger.Level.FULL;
}
}
2.在yml中指定显示哪一个接口的信息
logging:
level:
# 指定显示哪一个接口的请求信息
com.sword.consumer.clients.ConsumerFeignClient: debug
访问接口,可以看到请求你的详细信息
image.png
网友评论