SpringCloud远程调用-OpenFeign

简介

OpenFeign是SpringCloud提供的一个声明式客户端组件,可以通过注解和接口的组合实现服务的远程接口调用,并且与Eureka和Ribbon组合使用能够实现负载均衡的效果

OpenFeign的服务调用

1.在pom.xml中引入依赖

        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

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

SpringCloud远程调用-OpenFeign_第1张图片
image.png

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,发现等待一段时间后,页面获取到端口值,访问成功,说明时间控制生效
控制台打印信息如下:

SpringCloud远程调用-OpenFeign_第2张图片
image.png

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

访问接口,可以看到请求你的详细信息


SpringCloud远程调用-OpenFeign_第3张图片
image.png

你可能感兴趣的:(SpringCloud远程调用-OpenFeign)