SpringCloud-OpenFeign服务调用

简介

OpenFeign

OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件。OpenFeign 是 Spring Cloud 对 Feign 的二次封装,它具有 Feign 的所有功能,并在 Feign 的基础上增加了对 Spring MVC 注解的支持,例如 @RequestMapping、@GetMapping 和 @PostMapping 等。

Feign

Feign 是一种声明式服务调用组件,它在 RestTemplate 的基础上做了进一步的封装。只需要创建一个接口并在接口上添加注解即可实现对HTTP接口的绑定。FEIGN集成了Ribbon,并且通过轮询的方式实现了客户端负载均衡。

OpenFeign的使用 

搭建Spring Cloud项目

创建以Consul为注册中心的Spring Cloud项目

搭建消费者模块,命名为cloud-consumer80-openfeign

①导入依赖

    <dependencies>
        <!--openfeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--consul 依赖:因为注册中心使用的是Consul-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!--spring boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

②创建application.yml配置文件

server:
  port: 80

spring:
  application:
    name: cloud-consumer-openfeign
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

③创建启动类,添加@EnableFeignClients注解,激活OpenFeign组件

@EnableFeignClients
@SpringBootApplication
public class ConsumerConsule80OpenFeign {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerConsule80OpenFeign.class, args);
    }
}

④创建IService接口,添加@FeignClient注解,指定服务提供者

@Component
@FeignClient(value = "cloud-provider")
public interface IConsumerService {
    //服务提供者访问路径
    @GetMapping("/provider/getUUID")
    public String getUUID();
}

⑤创建Controller,实现服务远程调用

@RestController
@RequestMapping("consumer")
public class ConsumerController {
    @Autowired
    private IConsumerService consumerService;

    @GetMapping("getUUID")
    public String getUUID() {
        return consumerService.getUUID();
    }

}

 测试

①启动Consul注册中心(启动命令consul aget -dev

②启动服务提供者cloud-provider8001

③启动服务提供者cloud-provider8002

 

④启动服务提供者cloud-provider8003

 

⑤启动服务消费者cloud-consumer80-openfeign

⑥访问http://localhost/consumer/getUUID,远程调用(多发几次请求,发现默认使用轮询方式实现负载均衡)

OpenFeign超时控制 

OpenFEIGN客户端默认只等待1秒钟,服务端业务处理超过1秒钟,FEIGN直接返回报错信息,因此需要OpenFEIGN超时控制。

超时案例

①修改服务提供者业务

@RestController
@RequestMapping("provider")
public class ProviderController {
    @Value("${server.port}")
    private String port;

    @GetMapping("getUUID")
    public String getUUID() {
        //使业务沉睡三秒
        //业务处理时间超过1秒
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (Exception e) {
        }
        return port + " : " + UUID.randomUUID();
    }
}

②远程调用业务

 ③查看原因

 

配置超时时间

①编辑消费方application.yml配置文件

feign:
  client:
    config:
      default:
        readTimeout: 5000
        connectTimeout: 5000

②测试

 

OpenFeign日志

OpenFeign日志是用来对OpenFeign接口的调用情况进行监控和输出的。在消费方使用。

OpenFeign日志级别

  1. NONE:默认的,不展示日志;
  2. BASIC:仅展示请求方式,URL,响应状态码以及执行时间;
  3. HEADERS:仅展示请求方式,URL,响应状态码,执行时间,请求头以及响应头信息;
  4. FULL:展示请求方式,URL,响应状态码,执行时间,请求头信息,响应头信息,请求和响应正文以及数据源。  

OpenFeign日志配置

①创建OpenFeignLog类,用于设置日志级别

@Configuration
public class OpenFeignLog {

    @Bean
    public Logger.Level getOpenFeignLogLevel() {
        return Logger.Level.BASIC;
    }
}

②编辑application.yml配置文件,添加以下内容

logging:
  level:
    #添加@FeignClient注解的类全路径名
    com.agi.springcloud.service.IConsumerService: debug

③查看日志

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值